Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/ena/ena_sysctl.c
Show All 26 Lines | |||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include "ena_sysctl.h" | #include "ena_sysctl.h" | ||||
static int ena_sysctl_update_stats(SYSCTL_HANDLER_ARGS); | |||||
static void ena_sysctl_add_stats(struct ena_adapter *); | static void ena_sysctl_add_stats(struct ena_adapter *); | ||||
void | void | ||||
ena_sysctl_add_nodes(struct ena_adapter *adapter) | ena_sysctl_add_nodes(struct ena_adapter *adapter) | ||||
{ | { | ||||
ena_sysctl_add_stats(adapter); | ena_sysctl_add_stats(adapter); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO, | ||||
&rx_stats->small_copy_len_pkt, "Small copy packet count"); | &rx_stats->small_copy_len_pkt, "Small copy packet 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, NULL, "Statistics from hardware"); | ||||
hw_list = SYSCTL_CHILDREN(hw_node); | hw_list = SYSCTL_CHILDREN(hw_node); | ||||
SYSCTL_ADD_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, 0, "Packets received"); | &hw_stats->rx_packets, "Packets received"); | ||||
SYSCTL_ADD_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, 0, "Packets transmitted"); | &hw_stats->tx_packets, "Packets transmitted"); | ||||
SYSCTL_ADD_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, 0, "Bytes received"); | &hw_stats->rx_bytes, "Bytes received"); | ||||
SYSCTL_ADD_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, 0, "Bytes transmitted"); | &hw_stats->tx_bytes, "Bytes transmitted"); | ||||
SYSCTL_ADD_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, 0, "Receive packet drops"); | &hw_stats->rx_drops, "Receive packet drops"); | ||||
SYSCTL_ADD_PROC(ctx, hw_list, OID_AUTO, "update_stats", | |||||
CTLTYPE_INT|CTLFLAG_RD, adapter, 0, ena_sysctl_update_stats, | |||||
"A", "Update stats from hardware"); | |||||
/* 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, 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"); | ||||
SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "out_of_space", CTLFLAG_RD, | SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "out_of_space", CTLFLAG_RD, | ||||
&admin_stats->out_of_space, 0, "Queue out of space"); | &admin_stats->out_of_space, 0, "Queue out of space"); | ||||
SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "no_completion", CTLFLAG_RD, | SYSCTL_ADD_U32(ctx, admin_list, OID_AUTO, "no_completion", CTLFLAG_RD, | ||||
&admin_stats->no_completion, 0, "Commands not completed"); | &admin_stats->no_completion, 0, "Commands not completed"); | ||||
} | |||||
static int | |||||
ena_sysctl_update_stats(SYSCTL_HANDLER_ARGS) | |||||
{ | |||||
struct ena_adapter *adapter = (struct ena_adapter *)arg1; | |||||
int rc; | |||||
if (adapter->up) | |||||
ena_update_stats_counters(adapter); | |||||
rc = sysctl_handle_string(oidp, "", 1, req); | |||||
return (rc); | |||||
} | } | ||||