Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ena/ena_sysctl.c
Show All 12 Lines | |||||
#include "ena_sysctl.h" | #include "ena_sysctl.h" | ||||
static void ena_sysctl_add_wd(struct ena_adapter *); | static void ena_sysctl_add_wd(struct ena_adapter *); | ||||
static void ena_sysctl_add_stats(struct ena_adapter *); | static void ena_sysctl_add_stats(struct ena_adapter *); | ||||
static void ena_sysctl_add_tuneables(struct ena_adapter *); | static void ena_sysctl_add_tuneables(struct ena_adapter *); | ||||
static int ena_sysctl_buf_ring_size(SYSCTL_HANDLER_ARGS); | static int ena_sysctl_buf_ring_size(SYSCTL_HANDLER_ARGS); | ||||
static int ena_sysctl_rx_queue_size(SYSCTL_HANDLER_ARGS); | static int ena_sysctl_rx_queue_size(SYSCTL_HANDLER_ARGS); | ||||
static SYSCTL_NODE(_hw, OID_AUTO, ena, CTLFLAG_RD, 0, "ENA driver parameters"); | static SYSCTL_NODE(_hw, OID_AUTO, ena, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | ||||
"ENA driver parameters"); | |||||
/* | /* | ||||
* Logging level for changing verbosity of the output | * Logging level for changing verbosity of the output | ||||
*/ | */ | ||||
int ena_log_level = ENA_ALERT | ENA_WARNING; | int ena_log_level = ENA_ALERT | ENA_WARNING; | ||||
SYSCTL_INT(_hw_ena, OID_AUTO, log_level, CTLFLAG_RWTUN, | SYSCTL_INT(_hw_ena, OID_AUTO, log_level, CTLFLAG_RWTUN, | ||||
&ena_log_level, 0, "Logging level indicating verbosity of the logs"); | &ena_log_level, 0, "Logging level indicating verbosity of the logs"); | ||||
Show All 24 Lines | |||||
SYSCTL_ADD_COUNTER_U64(ctx, child, OID_AUTO, "admin_q_pause", | SYSCTL_ADD_COUNTER_U64(ctx, child, OID_AUTO, "admin_q_pause", | ||||
CTLFLAG_RD, &dev_stats->admin_q_pause, | CTLFLAG_RD, &dev_stats->admin_q_pause, | ||||
"Admin queue pauses"); | "Admin queue pauses"); | ||||
for (i = 0; i < adapter->num_queues; ++i, ++tx_ring, ++rx_ring) { | for (i = 0; i < adapter->num_queues; ++i, ++tx_ring, ++rx_ring) { | ||||
snprintf(namebuf, QUEUE_NAME_LEN, "queue%d", i); | snprintf(namebuf, QUEUE_NAME_LEN, "queue%d", i); | ||||
queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, | queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, | ||||
namebuf, CTLFLAG_RD, NULL, "Queue Name"); | namebuf, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Queue Name"); | ||||
queue_list = SYSCTL_CHILDREN(queue_node); | queue_list = SYSCTL_CHILDREN(queue_node); | ||||
/* TX specific stats */ | /* TX specific stats */ | ||||
tx_node = SYSCTL_ADD_NODE(ctx, queue_list, OID_AUTO, | tx_node = SYSCTL_ADD_NODE(ctx, queue_list, OID_AUTO, | ||||
"tx_ring", CTLFLAG_RD, NULL, "TX ring"); | "tx_ring", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "TX ring"); | ||||
tx_list = SYSCTL_CHILDREN(tx_node); | tx_list = SYSCTL_CHILDREN(tx_node); | ||||
tx_stats = &tx_ring->tx_stats; | tx_stats = &tx_ring->tx_stats; | ||||
SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO, | SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO, | ||||
"count", CTLFLAG_RD, | "count", CTLFLAG_RD, | ||||
&tx_stats->cnt, "Packets sent"); | &tx_stats->cnt, "Packets sent"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO, | SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO, | ||||
Show All 24 Lines | |||||
&tx_stats->queue_stop, "Queue stops"); | &tx_stats->queue_stop, "Queue stops"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO, | SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO, | ||||
"llq_buffer_copy", CTLFLAG_RD, | "llq_buffer_copy", CTLFLAG_RD, | ||||
&tx_stats->llq_buffer_copy, | &tx_stats->llq_buffer_copy, | ||||
"Header copies for llq transaction"); | "Header copies for llq transaction"); | ||||
/* RX specific stats */ | /* RX specific stats */ | ||||
rx_node = SYSCTL_ADD_NODE(ctx, queue_list, OID_AUTO, | rx_node = SYSCTL_ADD_NODE(ctx, queue_list, OID_AUTO, | ||||
"rx_ring", CTLFLAG_RD, NULL, "RX ring"); | "rx_ring", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "RX ring"); | ||||
rx_list = SYSCTL_CHILDREN(rx_node); | rx_list = SYSCTL_CHILDREN(rx_node); | ||||
rx_stats = &rx_ring->rx_stats; | rx_stats = &rx_ring->rx_stats; | ||||
SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | ||||
"count", CTLFLAG_RD, | "count", CTLFLAG_RD, | ||||
&rx_stats->cnt, "Packets received"); | &rx_stats->cnt, "Packets received"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | ||||
Show All 22 Lines | |||||
&rx_stats->bad_req_id, "Bad request id count"); | &rx_stats->bad_req_id, "Bad request id count"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | ||||
"empty_rx_ring", CTLFLAG_RD, | "empty_rx_ring", CTLFLAG_RD, | ||||
&rx_stats->empty_rx_ring, "RX descriptors depletion count"); | &rx_stats->empty_rx_ring, "RX descriptors depletion count"); | ||||
} | } | ||||
/* Stats read from device */ | /* Stats read from device */ | ||||
hw_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "hw_stats", | hw_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "hw_stats", | ||||
CTLFLAG_RD, NULL, "Statistics from hardware"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Statistics from hardware"); | ||||
hw_list = SYSCTL_CHILDREN(hw_node); | hw_list = SYSCTL_CHILDREN(hw_node); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "rx_packets", CTLFLAG_RD, | SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "rx_packets", CTLFLAG_RD, | ||||
&hw_stats->rx_packets, "Packets received"); | &hw_stats->rx_packets, "Packets received"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "tx_packets", CTLFLAG_RD, | SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "tx_packets", CTLFLAG_RD, | ||||
&hw_stats->tx_packets, "Packets transmitted"); | &hw_stats->tx_packets, "Packets transmitted"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "rx_bytes", CTLFLAG_RD, | SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "rx_bytes", CTLFLAG_RD, | ||||
&hw_stats->rx_bytes, "Bytes received"); | &hw_stats->rx_bytes, "Bytes received"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "tx_bytes", CTLFLAG_RD, | SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "tx_bytes", CTLFLAG_RD, | ||||
&hw_stats->tx_bytes, "Bytes transmitted"); | &hw_stats->tx_bytes, "Bytes transmitted"); | ||||
SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "rx_drops", CTLFLAG_RD, | SYSCTL_ADD_COUNTER_U64(ctx, hw_list, OID_AUTO, "rx_drops", CTLFLAG_RD, | ||||
&hw_stats->rx_drops, "Receive packet drops"); | &hw_stats->rx_drops, "Receive packet drops"); | ||||
/* ENA Admin queue stats */ | /* ENA Admin queue stats */ | ||||
admin_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "admin_stats", | admin_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "admin_stats", | ||||
CTLFLAG_RD, NULL, "ENA Admin Queue statistics"); | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "ENA Admin Queue statistics"); | ||||
admin_list = SYSCTL_CHILDREN(admin_node); | admin_list = SYSCTL_CHILDREN(admin_node); | ||||
SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "aborted_cmd", CTLFLAG_RD, | SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "aborted_cmd", CTLFLAG_RD, | ||||
&admin_stats->aborted_cmd, 0, "Aborted commands"); | &admin_stats->aborted_cmd, 0, "Aborted commands"); | ||||
SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "sumbitted_cmd", CTLFLAG_RD, | SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "sumbitted_cmd", CTLFLAG_RD, | ||||
&admin_stats->submitted_cmd, 0, "Submitted commands"); | &admin_stats->submitted_cmd, 0, "Submitted commands"); | ||||
SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "completed_cmd", CTLFLAG_RD, | SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "completed_cmd", CTLFLAG_RD, | ||||
&admin_stats->completed_cmd, 0, "Completed commands"); | &admin_stats->completed_cmd, 0, "Completed commands"); | ||||
Show All 14 Lines | |||||
dev = adapter->pdev; | dev = adapter->pdev; | ||||
ctx = device_get_sysctl_ctx(dev); | ctx = device_get_sysctl_ctx(dev); | ||||
tree = device_get_sysctl_tree(dev); | tree = device_get_sysctl_tree(dev); | ||||
child = SYSCTL_CHILDREN(tree); | child = SYSCTL_CHILDREN(tree); | ||||
/* Tuneable number of buffers in the buf-ring (drbr) */ | /* Tuneable number of buffers in the buf-ring (drbr) */ | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "buf_ring_size", CTLTYPE_INT | | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "buf_ring_size", | ||||
CTLFLAG_RW, adapter, 0, ena_sysctl_buf_ring_size, "I", | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, adapter, 0, | ||||
"Size of the bufring"); | ena_sysctl_buf_ring_size, "I", "Size of the bufring"); | ||||
/* Tuneable number of Rx ring size */ | /* Tuneable number of Rx ring size */ | ||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rx_queue_size", CTLTYPE_INT | | SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rx_queue_size", | ||||
CTLFLAG_RW, adapter, 0, ena_sysctl_rx_queue_size, "I", | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, adapter, 0, | ||||
"Size of the Rx ring. The size should be a power of 2. " | ena_sysctl_rx_queue_size, "I", "Size of the Rx ring. " | ||||
"Max value is 8K"); | "The size should be a power of 2. Max value is 8K"); | ||||
} | } | ||||
static int | static int | ||||
ena_sysctl_buf_ring_size(SYSCTL_HANDLER_ARGS) | ena_sysctl_buf_ring_size(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
struct ena_adapter *adapter = arg1; | struct ena_adapter *adapter = arg1; | ||||
int val; | int val; | ||||
Show All 12 Lines |