diff --git a/include/spdk/trace.h b/include/spdk/trace.h index 5c6c83693..7ac903245 100644 --- a/include/spdk/trace.h +++ b/include/spdk/trace.h @@ -332,7 +332,17 @@ void spdk_trace_register_description(const char *name, const char *short_name, uint8_t object_type, uint8_t new_object, uint8_t arg1_is_ptr, const char *arg1_name); +/** + * Show trace mask and its usage. + * + * \param f File to hold the mask's information. + * \param tmask_arg Command line option to set the trace group mask. + */ +void spdk_trace_mask_usage(FILE *f, const char *tmask_arg); + struct spdk_trace_register_fn { + const char *name; + uint8_t tgroup_id; void (*reg_fn)(void); struct spdk_trace_register_fn *next; }; @@ -344,9 +354,11 @@ struct spdk_trace_register_fn { */ void spdk_trace_add_register_fn(struct spdk_trace_register_fn *reg_fn); -#define SPDK_TRACE_REGISTER_FN(fn) \ +#define SPDK_TRACE_REGISTER_FN(fn, name_str, _tgroup_id) \ static void fn(void); \ struct spdk_trace_register_fn reg_ ## fn = { \ + .name = name_str, \ + .tgroup_id = _tgroup_id, \ .reg_fn = fn, \ .next = NULL, \ }; \ diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 6d18d9d91..b8871e757 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -4094,7 +4094,7 @@ spdk_bdev_set_qos_rate_limits(struct spdk_bdev *bdev, uint64_t *limits, SPDK_LOG_REGISTER_COMPONENT("bdev", SPDK_LOG_BDEV) -SPDK_TRACE_REGISTER_FN(bdev_trace) +SPDK_TRACE_REGISTER_FN(bdev_trace, "bdev", TRACE_GROUP_BDEV) { spdk_trace_register_owner(OWNER_BDEV, 'b'); spdk_trace_register_object(OBJECT_BDEV_IO, 'i'); diff --git a/lib/event/app.c b/lib/event/app.c index 0bb771aa6..a9fd92640 100644 --- a/lib/event/app.c +++ b/lib/event/app.c @@ -711,8 +711,6 @@ usage(void (*app_usage)(void)) printf(" -c, --config config file (default %s)\n", g_default_opts.config_file != NULL ? g_default_opts.config_file : "none"); printf(" -d, --limit-coredump do not set max coredump size to RLIM_INFINITY\n"); - printf(" -e, --tpoint-group-mask \n"); - printf(" tracepoint group mask for spdk trace buffers (default 0x0)\n"); printf(" -g, --single-file-segments\n"); printf(" force creating just one hugetlbfs file\n"); printf(" -h, --help show this usage\n"); @@ -742,6 +740,7 @@ usage(void (*app_usage)(void)) printf(" --num-trace-entries number of trace entries for each core (default %d)\n", SPDK_APP_DEFAULT_NUM_TRACE_ENTRIES); spdk_tracelog_usage(stdout, "-L"); + spdk_trace_mask_usage(stdout, "-e"); if (app_usage) { app_usage(); } diff --git a/lib/iscsi/conn.c b/lib/iscsi/conn.c index 8a074186b..2c89feab9 100644 --- a/lib/iscsi/conn.c +++ b/lib/iscsi/conn.c @@ -1469,7 +1469,7 @@ spdk_iscsi_conn_logout(struct spdk_iscsi_conn *conn) conn->logout_timer = spdk_poller_register(logout_timeout, conn, ISCSI_LOGOUT_TIMEOUT * 1000000); } -SPDK_TRACE_REGISTER_FN(iscsi_conn_trace) +SPDK_TRACE_REGISTER_FN(iscsi_conn_trace, "iscsi_conn", TRACE_GROUP_ISCSI) { spdk_trace_register_owner(OWNER_ISCSI_CONN, 'c'); spdk_trace_register_object(OBJECT_ISCSI_PDU, 'p'); diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 865ef9b8c..54906616c 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -134,7 +134,7 @@ enum spdk_nvmf_rdma_request_state { #define TRACE_RDMA_QP_DISCONNECT SPDK_TPOINT_ID(TRACE_GROUP_NVMF_RDMA, 0xF) #define TRACE_RDMA_QP_DESTROY SPDK_TPOINT_ID(TRACE_GROUP_NVMF_RDMA, 0x10) -SPDK_TRACE_REGISTER_FN(nvmf_trace) +SPDK_TRACE_REGISTER_FN(nvmf_trace, "nvmf_rdma", TRACE_GROUP_NVMF_RDMA) { spdk_trace_register_object(OBJECT_NVMF_RDMA_IO, 'r'); spdk_trace_register_description("RDMA_REQ_NEW", "", diff --git a/lib/nvmf/tcp.c b/lib/nvmf/tcp.c index 17cc61e43..c9f0acdf3 100644 --- a/lib/nvmf/tcp.c +++ b/lib/nvmf/tcp.c @@ -131,7 +131,7 @@ static const char *spdk_nvme_tcp_term_req_fes_str[] = { #define TRACE_TCP_FLUSH_WRITEBUF_DONE SPDK_TPOINT_ID(TRACE_GROUP_NVMF_TCP, 0xB) #define TRACE_TCP_FLUSH_WRITEBUF_PDU_DONE SPDK_TPOINT_ID(TRACE_GROUP_NVMF_TCP, 0xC) -SPDK_TRACE_REGISTER_FN(nvmf_tcp_trace) +SPDK_TRACE_REGISTER_FN(nvmf_tcp_trace, "nvmf_tcp", TRACE_GROUP_NVMF_TCP) { spdk_trace_register_object(OBJECT_NVMF_TCP_IO, 'r'); spdk_trace_register_description("TCP_REQ_NEW", "", diff --git a/lib/scsi/scsi.c b/lib/scsi/scsi.c index 5dce04468..5f7b28bd0 100644 --- a/lib/scsi/scsi.c +++ b/lib/scsi/scsi.c @@ -56,7 +56,7 @@ spdk_scsi_fini(void) pthread_mutex_destroy(&g_spdk_scsi.mutex); } -SPDK_TRACE_REGISTER_FN(scsi_trace) +SPDK_TRACE_REGISTER_FN(scsi_trace, "scsi", TRACE_GROUP_SCSI) { spdk_trace_register_owner(OWNER_SCSI_DEV, 'd'); spdk_trace_register_object(OBJECT_SCSI_TASK, 't'); diff --git a/lib/trace/trace_flags.c b/lib/trace/trace_flags.c index 69ca0bdf6..5176465d0 100644 --- a/lib/trace/trace_flags.c +++ b/lib/trace/trace_flags.c @@ -100,6 +100,23 @@ spdk_trace_set_tpoint_group_mask(uint64_t tpoint_group_mask) } } +void +spdk_trace_mask_usage(FILE *f, const char *tmask_arg) +{ + struct spdk_trace_register_fn *register_fn; + + fprintf(f, " %s, --tpoint-group-mask \n", tmask_arg); + fprintf(f, " tracepoint group mask for spdk trace buffers (default 0x0"); + + register_fn = g_reg_fn_head; + while (register_fn) { + fprintf(f, ", %s 0x%x", register_fn->name, 1 << register_fn->tgroup_id); + register_fn = register_fn->next; + } + + fprintf(f, ", all 0xffff)\n"); +} + void spdk_trace_register_owner(uint8_t type, char id_prefix) { @@ -165,7 +182,6 @@ spdk_trace_add_register_fn(struct spdk_trace_register_fn *reg_fn) g_reg_fn_head = reg_fn; } - void spdk_trace_flags_init(void) {