Changeset 92c1680 in mainline


Ignore:
Timestamp:
2013-09-09T21:13:57Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2e2c18a1
Parents:
ee7f78a
Message:

Run-time core dump enable/disable.

Files:
5 added
5 edited

Legend:

Unmodified
Added
Removed
  • boot/Makefile.common

    ree7f78a r92c1680  
    165165        $(USPACE_PATH)/app/blkdump/blkdump \
    166166        $(USPACE_PATH)/app/bnchmark/bnchmark \
     167        $(USPACE_PATH)/app/corecfg/corecfg \
    167168        $(USPACE_PATH)/app/devctl/devctl \
    168169        $(USPACE_PATH)/app/dltest/dltest \
  • uspace/Makefile

    ree7f78a r92c1680  
    3838        app/blkdump \
    3939        app/bnchmark \
     40        app/corecfg \
    4041        app/devctl \
    4142        app/dnscfg \
  • uspace/lib/c/Makefile

    ree7f78a r92c1680  
    6565        generic/cfg.c \
    6666        generic/clipboard.c \
     67        generic/corecfg.c \
    6768        generic/devman.c \
    6869        generic/device/hw_res.c \
  • uspace/lib/c/include/ipc/services.h

    ree7f78a r92c1680  
    5353} services_t;
    5454
     55#define SERVICE_NAME_CORECFG    "corecfg"
    5556#define SERVICE_NAME_DNSR       "net/dnsr"
    5657#define SERVICE_NAME_INET       "net/inet"
  • uspace/srv/taskmon/taskmon.c

    ree7f78a r92c1680  
    11/*
    2  * Copyright (c) 2010 Jiri Svoboda
     2 * Copyright (c) 2013 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4141#include <task.h>
    4242#include <event.h>
     43#include <ipc/corecfg.h>
     44#include <loc.h>
    4345#include <macros.h>
    4446#include <errno.h>
     
    4749#define NAME  "taskmon"
    4850
     51static bool write_core_files;
     52
     53static void corecfg_client_conn(ipc_callid_t , ipc_call_t *, void *);
     54
    4955static void fault_event(ipc_callid_t callid, ipc_call_t *call)
    5056{
    5157        const char *fname;
    5258        char *s_taskid;
     59        char *dump_fname;
    5360        int rc;
    5461
     
    6976        fname = "/app/taskdump";
    7077
    71 #ifdef CONFIG_WRITE_CORE_FILES
    72         char *dump_fname;
     78        if (write_core_files) {
     79                if (asprintf(&dump_fname, "/data/core%" PRIu64, taskid) < 0) {
     80                        printf("Memory allocation failed.\n");
     81                        return;
     82                }
    7383
    74         if (asprintf(&dump_fname, "/data/core%" PRIu64, taskid) < 0) {
    75                 printf("Memory allocation failed.\n");
    76                 return;
     84                printf(NAME ": Executing %s -c %s -t %s\n", fname, dump_fname, s_taskid);
     85                rc = task_spawnl(NULL, fname, fname, "-c", dump_fname, "-t", s_taskid,
     86                    NULL);
     87        } else {
     88                printf(NAME ": Executing %s -t %s\n", fname, s_taskid);
     89                rc = task_spawnl(NULL, fname, fname, "-t", s_taskid, NULL);
    7790        }
    7891
    79         printf(NAME ": Executing %s -c %s -t %s\n", fname, dump_fname, s_taskid);
    80         rc = task_spawnl(NULL, fname, fname, "-c", dump_fname, "-t", s_taskid,
    81             NULL);
    82 #else
    83         printf(NAME ": Executing %s -t %s\n", fname, s_taskid);
    84         rc = task_spawnl(NULL, fname, fname, "-t", s_taskid, NULL);
    85 #endif
    8692        if (rc != EOK) {
    8793                printf("%s: Error spawning %s (%s).\n", NAME, fname,
    8894                    str_error(rc));
     95        }
     96}
     97
     98static void corecfg_get_enable_srv(ipc_callid_t iid, ipc_call_t *icall)
     99{
     100        async_answer_1(iid, EOK, write_core_files);
     101}
     102
     103static void corecfg_set_enable_srv(ipc_callid_t iid, ipc_call_t *icall)
     104{
     105        write_core_files = IPC_GET_ARG1(*icall);
     106        async_answer_0(iid, EOK);
     107}
     108
     109static void corecfg_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     110{
     111        /* Accept the connection */
     112        async_answer_0(iid, EOK);
     113
     114        while (true) {
     115                ipc_call_t call;
     116                ipc_callid_t callid = async_get_call(&call);
     117                sysarg_t method = IPC_GET_IMETHOD(call);
     118
     119                if (!method) {
     120                        /* The other side has hung up */
     121                        async_answer_0(callid, EOK);
     122                        return;
     123                }
     124
     125                switch (method) {
     126                case CORECFG_GET_ENABLE:
     127                        corecfg_get_enable_srv(callid, &call);
     128                        break;
     129                case CORECFG_SET_ENABLE:
     130                        corecfg_set_enable_srv(callid, &call);
     131                        break;
     132                }
    89133        }
    90134}
     
    94138        printf("%s: Task Monitoring Service\n", NAME);
    95139       
     140#ifdef CONFIG_WRITE_CORE_FILES
     141        write_core_files = true;
     142#else
     143        write_core_files = false;
     144#endif
    96145        if (event_subscribe(EVENT_FAULT, 0) != EOK) {
    97146                printf("%s: Error registering fault notifications.\n", NAME);
     147                return -1;
     148        }
     149       
     150        async_set_client_connection(corecfg_client_conn);
     151       
     152        int rc = loc_server_register(NAME);
     153        if (rc != EOK) {
     154                printf("%s: Failed registering server (%d).\n",
     155                    NAME, rc);
     156                return -1;
     157        }
     158       
     159        service_id_t sid;
     160        rc = loc_service_register(SERVICE_NAME_CORECFG, &sid);
     161        if (rc != EOK) {
     162                printf("%s: Failed registering service (%d).\n",
     163                    NAME, rc);
    98164                return -1;
    99165        }
Note: See TracChangeset for help on using the changeset viewer.