Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/nvme/nvme_sysctl.c
Show All 12 Lines | |||||
"coalescing)"); | "coalescing)"); | ||||
SYSCTL_ADD_QUAD(ctrlr_ctx, que_list, OID_AUTO, "num_retries", | SYSCTL_ADD_QUAD(ctrlr_ctx, que_list, OID_AUTO, "num_retries", | ||||
CTLFLAG_RD, &qpair->num_retries, "Number of commands retried"); | CTLFLAG_RD, &qpair->num_retries, "Number of commands retried"); | ||||
SYSCTL_ADD_QUAD(ctrlr_ctx, que_list, OID_AUTO, "num_failures", | SYSCTL_ADD_QUAD(ctrlr_ctx, que_list, OID_AUTO, "num_failures", | ||||
CTLFLAG_RD, &qpair->num_failures, | CTLFLAG_RD, &qpair->num_failures, | ||||
"Number of commands ending in failure after all retries"); | "Number of commands ending in failure after all retries"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, que_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, que_list, OID_AUTO, | ||||
"dump_debug", CTLTYPE_UINT | CTLFLAG_RW, qpair, 0, | "dump_debug", | ||||
CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, qpair, 0, | |||||
nvme_sysctl_dump_debug, "IU", "Dump debug data"); | nvme_sysctl_dump_debug, "IU", "Dump debug data"); | ||||
} | } | ||||
void | void | ||||
nvme_sysctl_initialize_ctrlr(struct nvme_controller *ctrlr) | nvme_sysctl_initialize_ctrlr(struct nvme_controller *ctrlr) | ||||
{ | { | ||||
struct sysctl_ctx_list *ctrlr_ctx; | struct sysctl_ctx_list *ctrlr_ctx; | ||||
struct sysctl_oid *ctrlr_tree, *que_tree; | struct sysctl_oid *ctrlr_tree, *que_tree; | ||||
struct sysctl_oid_list *ctrlr_list; | struct sysctl_oid_list *ctrlr_list; | ||||
#define QUEUE_NAME_LENGTH 16 | #define QUEUE_NAME_LENGTH 16 | ||||
char queue_name[QUEUE_NAME_LENGTH]; | char queue_name[QUEUE_NAME_LENGTH]; | ||||
int i; | int i; | ||||
ctrlr_ctx = device_get_sysctl_ctx(ctrlr->dev); | ctrlr_ctx = device_get_sysctl_ctx(ctrlr->dev); | ||||
ctrlr_tree = device_get_sysctl_tree(ctrlr->dev); | ctrlr_tree = device_get_sysctl_tree(ctrlr->dev); | ||||
ctrlr_list = SYSCTL_CHILDREN(ctrlr_tree); | ctrlr_list = SYSCTL_CHILDREN(ctrlr_tree); | ||||
SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "num_io_queues", | SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "num_io_queues", | ||||
CTLFLAG_RD, &ctrlr->num_io_queues, 0, | CTLFLAG_RD, &ctrlr->num_io_queues, 0, | ||||
"Number of I/O queue pairs"); | "Number of I/O queue pairs"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"int_coal_time", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0, | "int_coal_time", | ||||
CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, ctrlr, 0, | |||||
nvme_sysctl_int_coal_time, "IU", | nvme_sysctl_int_coal_time, "IU", | ||||
"Interrupt coalescing timeout (in microseconds)"); | "Interrupt coalescing timeout (in microseconds)"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"int_coal_threshold", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0, | "int_coal_threshold", | ||||
CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, ctrlr, 0, | |||||
nvme_sysctl_int_coal_threshold, "IU", | nvme_sysctl_int_coal_threshold, "IU", | ||||
"Interrupt coalescing threshold"); | "Interrupt coalescing threshold"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"timeout_period", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0, | "timeout_period", | ||||
CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, ctrlr, 0, | |||||
nvme_sysctl_timeout_period, "IU", | nvme_sysctl_timeout_period, "IU", | ||||
"Timeout period (in seconds)"); | "Timeout period (in seconds)"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"num_cmds", CTLTYPE_S64 | CTLFLAG_RD, | "num_cmds", | ||||
CTLTYPE_S64 | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | |||||
ctrlr, 0, nvme_sysctl_num_cmds, "IU", | ctrlr, 0, nvme_sysctl_num_cmds, "IU", | ||||
"Number of commands submitted"); | "Number of commands submitted"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"num_intr_handler_calls", CTLTYPE_S64 | CTLFLAG_RD, | "num_intr_handler_calls", | ||||
CTLTYPE_S64 | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | |||||
ctrlr, 0, nvme_sysctl_num_intr_handler_calls, "IU", | ctrlr, 0, nvme_sysctl_num_intr_handler_calls, "IU", | ||||
"Number of times interrupt handler was invoked (will " | "Number of times interrupt handler was invoked (will " | ||||
"typically be less than number of actual interrupts " | "typically be less than number of actual interrupts " | ||||
"generated due to coalescing)"); | "generated due to coalescing)"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"num_retries", CTLTYPE_S64 | CTLFLAG_RD, | "num_retries", | ||||
CTLTYPE_S64 | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | |||||
ctrlr, 0, nvme_sysctl_num_retries, "IU", | ctrlr, 0, nvme_sysctl_num_retries, "IU", | ||||
"Number of commands retried"); | "Number of commands retried"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"num_failures", CTLTYPE_S64 | CTLFLAG_RD, | "num_failures", | ||||
CTLTYPE_S64 | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | |||||
ctrlr, 0, nvme_sysctl_num_failures, "IU", | ctrlr, 0, nvme_sysctl_num_failures, "IU", | ||||
"Number of commands ending in failure after all retries"); | "Number of commands ending in failure after all retries"); | ||||
SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
"reset_stats", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0, | "reset_stats", | ||||
CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, ctrlr, 0, | |||||
nvme_sysctl_reset_stats, "IU", "Reset statistics to zero"); | nvme_sysctl_reset_stats, "IU", "Reset statistics to zero"); | ||||
que_tree = SYSCTL_ADD_NODE(ctrlr_ctx, ctrlr_list, OID_AUTO, "adminq", | que_tree = SYSCTL_ADD_NODE(ctrlr_ctx, ctrlr_list, OID_AUTO, "adminq", | ||||
CTLFLAG_RD, NULL, "Admin Queue"); | CTLFLAG_RD, NULL, "Admin Queue"); | ||||
nvme_sysctl_initialize_queue(&ctrlr->adminq, ctrlr_ctx, que_tree); | nvme_sysctl_initialize_queue(&ctrlr->adminq, ctrlr_ctx, que_tree); | ||||
for (i = 0; i < ctrlr->num_io_queues; i++) { | for (i = 0; i < ctrlr->num_io_queues; i++) { | ||||
snprintf(queue_name, QUEUE_NAME_LENGTH, "ioq%d", i); | snprintf(queue_name, QUEUE_NAME_LENGTH, "ioq%d", i); | ||||
que_tree = SYSCTL_ADD_NODE(ctrlr_ctx, ctrlr_list, OID_AUTO, | que_tree = SYSCTL_ADD_NODE(ctrlr_ctx, ctrlr_list, OID_AUTO, | ||||
queue_name, CTLFLAG_RD, NULL, "IO Queue"); | queue_name, CTLFLAG_RD, NULL, "IO Queue"); | ||||
nvme_sysctl_initialize_queue(&ctrlr->ioq[i], ctrlr_ctx, | nvme_sysctl_initialize_queue(&ctrlr->ioq[i], ctrlr_ctx, | ||||
que_tree); | que_tree); | ||||
} | } | ||||
} | } | ||||
Context not available. |