event/app: Refactor initialization of trace in spdk_app_start()
Refactor spdk_app_start() in lib/event/app.c to support JSON config file. Change-Id: I259f17dd2b2a9c886bae729b40792f04aa638c3a Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/405364 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
93cb4a311a
commit
af7cbd44b0
@ -356,16 +356,48 @@ spdk_app_setup_env(struct spdk_app_opts *opts)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
spdk_app_setup_trace(struct spdk_app_opts *opts)
|
||||
{
|
||||
char shm_name[64];
|
||||
uint64_t tpoint_group_mask;
|
||||
char *end;
|
||||
|
||||
if (opts->shm_id >= 0) {
|
||||
snprintf(shm_name, sizeof(shm_name), "/%s_trace.%d", opts->name, opts->shm_id);
|
||||
} else {
|
||||
snprintf(shm_name, sizeof(shm_name), "/%s_trace.pid%d", opts->name, (int)getpid());
|
||||
}
|
||||
|
||||
if (spdk_trace_init(shm_name) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (opts->tpoint_group_mask != NULL) {
|
||||
errno = 0;
|
||||
tpoint_group_mask = strtoull(opts->tpoint_group_mask, &end, 16);
|
||||
if (*end != '\0' || errno) {
|
||||
SPDK_ERRLOG("invalid tpoint mask %s\n", opts->tpoint_group_mask);
|
||||
} else {
|
||||
SPDK_NOTICELOG("Tracepoint Group Mask %s specified.\n", opts->tpoint_group_mask);
|
||||
SPDK_NOTICELOG("Use 'spdk_trace -s %s %s %d' to capture a snapshot of events at runtime.\n",
|
||||
opts->name,
|
||||
opts->shm_id >= 0 ? "-i" : "-p",
|
||||
opts->shm_id >= 0 ? opts->shm_id : getpid());
|
||||
spdk_trace_set_tpoint_group_mask(tpoint_group_mask);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn,
|
||||
void *arg1, void *arg2)
|
||||
{
|
||||
struct spdk_conf *config = NULL;
|
||||
char shm_name[64];
|
||||
int rc;
|
||||
uint64_t tpoint_group_mask;
|
||||
char *end;
|
||||
struct spdk_event *app_start_event;
|
||||
struct spdk_event *app_start_event;
|
||||
|
||||
if (!opts) {
|
||||
SPDK_ERRLOG("opts should not be NULL\n");
|
||||
@ -420,37 +452,16 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn,
|
||||
}
|
||||
|
||||
/*
|
||||
* Note the call to spdk_trace_init() is located here
|
||||
* Note the call to spdk_app_setup_trace() is located here
|
||||
* ahead of spdk_app_setup_signal_handlers().
|
||||
* That's because there is not an easy/direct clean
|
||||
* way of unwinding alloc'd resources that can occur
|
||||
* in spdk_app_setup_signal_handlers().
|
||||
*/
|
||||
if (opts->shm_id >= 0) {
|
||||
snprintf(shm_name, sizeof(shm_name), "/%s_trace.%d", opts->name, opts->shm_id);
|
||||
} else {
|
||||
snprintf(shm_name, sizeof(shm_name), "/%s_trace.pid%d", opts->name, (int)getpid());
|
||||
}
|
||||
|
||||
if (spdk_trace_init(shm_name) != 0) {
|
||||
if (spdk_app_setup_trace(opts) != 0) {
|
||||
goto app_start_log_close_err;
|
||||
}
|
||||
|
||||
if (opts->tpoint_group_mask != NULL) {
|
||||
errno = 0;
|
||||
tpoint_group_mask = strtoull(opts->tpoint_group_mask, &end, 16);
|
||||
if (*end != '\0' || errno) {
|
||||
SPDK_ERRLOG("invalid tpoint mask %s\n", opts->tpoint_group_mask);
|
||||
} else {
|
||||
SPDK_NOTICELOG("Tracepoint Group Mask %s specified.\n", opts->tpoint_group_mask);
|
||||
SPDK_NOTICELOG("Use 'spdk_trace -s %s %s %d' to capture a snapshot of events at runtime.\n",
|
||||
opts->name,
|
||||
opts->shm_id >= 0 ? "-i" : "-p",
|
||||
opts->shm_id >= 0 ? opts->shm_id : getpid());
|
||||
spdk_trace_set_tpoint_group_mask(tpoint_group_mask);
|
||||
}
|
||||
}
|
||||
|
||||
if ((rc = spdk_app_setup_signal_handlers(opts)) != 0) {
|
||||
goto app_start_trace_cleanup_err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user