Skip to content

Commit 13f30b0

Browse files
aharonl-nvidiajgunthorpe
authored andcommitted
RDMA/counter: Add a descriptor in struct rdma_hw_stats
Add a counter statistic descriptor structure in rdma_hw_stats. In addition to the counter name, more meta-information will be added. This code extension is needed for optional-counter support in the following patches. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Aharon Landau <[email protected]> Signed-off-by: Leon Romanovsky <[email protected]> Signed-off-by: Mark Zhang <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent 3eea40d commit 13f30b0

File tree

13 files changed

+252
-245
lines changed

13 files changed

+252
-245
lines changed

drivers/infiniband/core/nldev.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,8 @@ static int fill_stat_counter_hwcounters(struct sk_buff *msg,
969969
return -EMSGSIZE;
970970

971971
for (i = 0; i < st->num_counters; i++)
972-
if (rdma_nl_stat_hwcounter_entry(msg, st->names[i], st->value[i]))
972+
if (rdma_nl_stat_hwcounter_entry(msg, st->descs[i].name,
973+
st->value[i]))
973974
goto err;
974975

975976
nla_nest_end(msg, table_attr);
@@ -2105,7 +2106,8 @@ static int stat_get_doit_default_counter(struct sk_buff *skb,
21052106
for (i = 0; i < num_cnts; i++) {
21062107
v = stats->value[i] +
21072108
rdma_counter_get_hwstat_value(device, port, i);
2108-
if (rdma_nl_stat_hwcounter_entry(msg, stats->names[i], v)) {
2109+
if (rdma_nl_stat_hwcounter_entry(msg,
2110+
stats->descs[i].name, v)) {
21092111
ret = -EMSGSIZE;
21102112
goto err_table;
21112113
}

drivers/infiniband/core/sysfs.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ alloc_hw_stats_device(struct ib_device *ibdev)
895895
stats = ibdev->ops.alloc_hw_device_stats(ibdev);
896896
if (!stats)
897897
return ERR_PTR(-ENOMEM);
898-
if (!stats->names || stats->num_counters <= 0)
898+
if (!stats->descs || stats->num_counters <= 0)
899899
goto err_free_stats;
900900

901901
/*
@@ -957,7 +957,7 @@ int ib_setup_device_attrs(struct ib_device *ibdev)
957957
for (i = 0; i < data->stats->num_counters; i++) {
958958
attr = &data->attrs[i];
959959
sysfs_attr_init(&attr->attr.attr);
960-
attr->attr.attr.name = data->stats->names[i];
960+
attr->attr.attr.name = data->stats->descs[i].name;
961961
attr->attr.attr.mode = 0444;
962962
attr->attr.show = hw_stat_device_show;
963963
attr->show = show_hw_stats;
@@ -994,7 +994,7 @@ alloc_hw_stats_port(struct ib_port *port, struct attribute_group *group)
994994
stats = ibdev->ops.alloc_hw_port_stats(port->ibdev, port->port_num);
995995
if (!stats)
996996
return ERR_PTR(-ENOMEM);
997-
if (!stats->names || stats->num_counters <= 0)
997+
if (!stats->descs || stats->num_counters <= 0)
998998
goto err_free_stats;
999999

10001000
/*
@@ -1047,7 +1047,7 @@ static int setup_hw_port_stats(struct ib_port *port,
10471047
for (i = 0; i < data->stats->num_counters; i++) {
10481048
attr = &data->attrs[i];
10491049
sysfs_attr_init(&attr->attr.attr);
1050-
attr->attr.attr.name = data->stats->names[i];
1050+
attr->attr.attr.name = data->stats->descs[i].name;
10511051
attr->attr.attr.mode = 0444;
10521052
attr->attr.show = hw_stat_port_show;
10531053
attr->show = show_hw_stats;

drivers/infiniband/hw/bnxt_re/hw_counters.c

Lines changed: 67 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -57,74 +57,72 @@
5757
#include "bnxt_re.h"
5858
#include "hw_counters.h"
5959

60-
static const char * const bnxt_re_stat_name[] = {
61-
[BNXT_RE_ACTIVE_PD] = "active_pds",
62-
[BNXT_RE_ACTIVE_AH] = "active_ahs",
63-
[BNXT_RE_ACTIVE_QP] = "active_qps",
64-
[BNXT_RE_ACTIVE_SRQ] = "active_srqs",
65-
[BNXT_RE_ACTIVE_CQ] = "active_cqs",
66-
[BNXT_RE_ACTIVE_MR] = "active_mrs",
67-
[BNXT_RE_ACTIVE_MW] = "active_mws",
68-
[BNXT_RE_RX_PKTS] = "rx_pkts",
69-
[BNXT_RE_RX_BYTES] = "rx_bytes",
70-
[BNXT_RE_TX_PKTS] = "tx_pkts",
71-
[BNXT_RE_TX_BYTES] = "tx_bytes",
72-
[BNXT_RE_RECOVERABLE_ERRORS] = "recoverable_errors",
73-
[BNXT_RE_RX_ERRORS] = "rx_roce_errors",
74-
[BNXT_RE_RX_DISCARDS] = "rx_roce_discards",
75-
[BNXT_RE_TO_RETRANSMITS] = "to_retransmits",
76-
[BNXT_RE_SEQ_ERR_NAKS_RCVD] = "seq_err_naks_rcvd",
77-
[BNXT_RE_MAX_RETRY_EXCEEDED] = "max_retry_exceeded",
78-
[BNXT_RE_RNR_NAKS_RCVD] = "rnr_naks_rcvd",
79-
[BNXT_RE_MISSING_RESP] = "missing_resp",
80-
[BNXT_RE_UNRECOVERABLE_ERR] = "unrecoverable_err",
81-
[BNXT_RE_BAD_RESP_ERR] = "bad_resp_err",
82-
[BNXT_RE_LOCAL_QP_OP_ERR] = "local_qp_op_err",
83-
[BNXT_RE_LOCAL_PROTECTION_ERR] = "local_protection_err",
84-
[BNXT_RE_MEM_MGMT_OP_ERR] = "mem_mgmt_op_err",
85-
[BNXT_RE_REMOTE_INVALID_REQ_ERR] = "remote_invalid_req_err",
86-
[BNXT_RE_REMOTE_ACCESS_ERR] = "remote_access_err",
87-
[BNXT_RE_REMOTE_OP_ERR] = "remote_op_err",
88-
[BNXT_RE_DUP_REQ] = "dup_req",
89-
[BNXT_RE_RES_EXCEED_MAX] = "res_exceed_max",
90-
[BNXT_RE_RES_LENGTH_MISMATCH] = "res_length_mismatch",
91-
[BNXT_RE_RES_EXCEEDS_WQE] = "res_exceeds_wqe",
92-
[BNXT_RE_RES_OPCODE_ERR] = "res_opcode_err",
93-
[BNXT_RE_RES_RX_INVALID_RKEY] = "res_rx_invalid_rkey",
94-
[BNXT_RE_RES_RX_DOMAIN_ERR] = "res_rx_domain_err",
95-
[BNXT_RE_RES_RX_NO_PERM] = "res_rx_no_perm",
96-
[BNXT_RE_RES_RX_RANGE_ERR] = "res_rx_range_err",
97-
[BNXT_RE_RES_TX_INVALID_RKEY] = "res_tx_invalid_rkey",
98-
[BNXT_RE_RES_TX_DOMAIN_ERR] = "res_tx_domain_err",
99-
[BNXT_RE_RES_TX_NO_PERM] = "res_tx_no_perm",
100-
[BNXT_RE_RES_TX_RANGE_ERR] = "res_tx_range_err",
101-
[BNXT_RE_RES_IRRQ_OFLOW] = "res_irrq_oflow",
102-
[BNXT_RE_RES_UNSUP_OPCODE] = "res_unsup_opcode",
103-
[BNXT_RE_RES_UNALIGNED_ATOMIC] = "res_unaligned_atomic",
104-
[BNXT_RE_RES_REM_INV_ERR] = "res_rem_inv_err",
105-
[BNXT_RE_RES_MEM_ERROR] = "res_mem_err",
106-
[BNXT_RE_RES_SRQ_ERR] = "res_srq_err",
107-
[BNXT_RE_RES_CMP_ERR] = "res_cmp_err",
108-
[BNXT_RE_RES_INVALID_DUP_RKEY] = "res_invalid_dup_rkey",
109-
[BNXT_RE_RES_WQE_FORMAT_ERR] = "res_wqe_format_err",
110-
[BNXT_RE_RES_CQ_LOAD_ERR] = "res_cq_load_err",
111-
[BNXT_RE_RES_SRQ_LOAD_ERR] = "res_srq_load_err",
112-
[BNXT_RE_RES_TX_PCI_ERR] = "res_tx_pci_err",
113-
[BNXT_RE_RES_RX_PCI_ERR] = "res_rx_pci_err",
114-
[BNXT_RE_OUT_OF_SEQ_ERR] = "oos_drop_count",
115-
[BNXT_RE_TX_ATOMIC_REQ] = "tx_atomic_req",
116-
[BNXT_RE_TX_READ_REQ] = "tx_read_req",
117-
[BNXT_RE_TX_READ_RES] = "tx_read_resp",
118-
[BNXT_RE_TX_WRITE_REQ] = "tx_write_req",
119-
[BNXT_RE_TX_SEND_REQ] = "tx_send_req",
120-
[BNXT_RE_RX_ATOMIC_REQ] = "rx_atomic_req",
121-
[BNXT_RE_RX_READ_REQ] = "rx_read_req",
122-
[BNXT_RE_RX_READ_RESP] = "rx_read_resp",
123-
[BNXT_RE_RX_WRITE_REQ] = "rx_write_req",
124-
[BNXT_RE_RX_SEND_REQ] = "rx_send_req",
125-
[BNXT_RE_RX_ROCE_GOOD_PKTS] = "rx_roce_good_pkts",
126-
[BNXT_RE_RX_ROCE_GOOD_BYTES] = "rx_roce_good_bytes",
127-
[BNXT_RE_OOB] = "rx_out_of_buffer"
60+
static const struct rdma_stat_desc bnxt_re_stat_descs[] = {
61+
[BNXT_RE_ACTIVE_QP].name = "active_qps",
62+
[BNXT_RE_ACTIVE_SRQ].name = "active_srqs",
63+
[BNXT_RE_ACTIVE_CQ].name = "active_cqs",
64+
[BNXT_RE_ACTIVE_MR].name = "active_mrs",
65+
[BNXT_RE_ACTIVE_MW].name = "active_mws",
66+
[BNXT_RE_RX_PKTS].name = "rx_pkts",
67+
[BNXT_RE_RX_BYTES].name = "rx_bytes",
68+
[BNXT_RE_TX_PKTS].name = "tx_pkts",
69+
[BNXT_RE_TX_BYTES].name = "tx_bytes",
70+
[BNXT_RE_RECOVERABLE_ERRORS].name = "recoverable_errors",
71+
[BNXT_RE_RX_ERRORS].name = "rx_roce_errors",
72+
[BNXT_RE_RX_DISCARDS].name = "rx_roce_discards",
73+
[BNXT_RE_TO_RETRANSMITS].name = "to_retransmits",
74+
[BNXT_RE_SEQ_ERR_NAKS_RCVD].name = "seq_err_naks_rcvd",
75+
[BNXT_RE_MAX_RETRY_EXCEEDED].name = "max_retry_exceeded",
76+
[BNXT_RE_RNR_NAKS_RCVD].name = "rnr_naks_rcvd",
77+
[BNXT_RE_MISSING_RESP].name = "missing_resp",
78+
[BNXT_RE_UNRECOVERABLE_ERR].name = "unrecoverable_err",
79+
[BNXT_RE_BAD_RESP_ERR].name = "bad_resp_err",
80+
[BNXT_RE_LOCAL_QP_OP_ERR].name = "local_qp_op_err",
81+
[BNXT_RE_LOCAL_PROTECTION_ERR].name = "local_protection_err",
82+
[BNXT_RE_MEM_MGMT_OP_ERR].name = "mem_mgmt_op_err",
83+
[BNXT_RE_REMOTE_INVALID_REQ_ERR].name = "remote_invalid_req_err",
84+
[BNXT_RE_REMOTE_ACCESS_ERR].name = "remote_access_err",
85+
[BNXT_RE_REMOTE_OP_ERR].name = "remote_op_err",
86+
[BNXT_RE_DUP_REQ].name = "dup_req",
87+
[BNXT_RE_RES_EXCEED_MAX].name = "res_exceed_max",
88+
[BNXT_RE_RES_LENGTH_MISMATCH].name = "res_length_mismatch",
89+
[BNXT_RE_RES_EXCEEDS_WQE].name = "res_exceeds_wqe",
90+
[BNXT_RE_RES_OPCODE_ERR].name = "res_opcode_err",
91+
[BNXT_RE_RES_RX_INVALID_RKEY].name = "res_rx_invalid_rkey",
92+
[BNXT_RE_RES_RX_DOMAIN_ERR].name = "res_rx_domain_err",
93+
[BNXT_RE_RES_RX_NO_PERM].name = "res_rx_no_perm",
94+
[BNXT_RE_RES_RX_RANGE_ERR].name = "res_rx_range_err",
95+
[BNXT_RE_RES_TX_INVALID_RKEY].name = "res_tx_invalid_rkey",
96+
[BNXT_RE_RES_TX_DOMAIN_ERR].name = "res_tx_domain_err",
97+
[BNXT_RE_RES_TX_NO_PERM].name = "res_tx_no_perm",
98+
[BNXT_RE_RES_TX_RANGE_ERR].name = "res_tx_range_err",
99+
[BNXT_RE_RES_IRRQ_OFLOW].name = "res_irrq_oflow",
100+
[BNXT_RE_RES_UNSUP_OPCODE].name = "res_unsup_opcode",
101+
[BNXT_RE_RES_UNALIGNED_ATOMIC].name = "res_unaligned_atomic",
102+
[BNXT_RE_RES_REM_INV_ERR].name = "res_rem_inv_err",
103+
[BNXT_RE_RES_MEM_ERROR].name = "res_mem_err",
104+
[BNXT_RE_RES_SRQ_ERR].name = "res_srq_err",
105+
[BNXT_RE_RES_CMP_ERR].name = "res_cmp_err",
106+
[BNXT_RE_RES_INVALID_DUP_RKEY].name = "res_invalid_dup_rkey",
107+
[BNXT_RE_RES_WQE_FORMAT_ERR].name = "res_wqe_format_err",
108+
[BNXT_RE_RES_CQ_LOAD_ERR].name = "res_cq_load_err",
109+
[BNXT_RE_RES_SRQ_LOAD_ERR].name = "res_srq_load_err",
110+
[BNXT_RE_RES_TX_PCI_ERR].name = "res_tx_pci_err",
111+
[BNXT_RE_RES_RX_PCI_ERR].name = "res_rx_pci_err",
112+
[BNXT_RE_OUT_OF_SEQ_ERR].name = "oos_drop_count",
113+
[BNXT_RE_TX_ATOMIC_REQ].name = "tx_atomic_req",
114+
[BNXT_RE_TX_READ_REQ].name = "tx_read_req",
115+
[BNXT_RE_TX_READ_RES].name = "tx_read_resp",
116+
[BNXT_RE_TX_WRITE_REQ].name = "tx_write_req",
117+
[BNXT_RE_TX_SEND_REQ].name = "tx_send_req",
118+
[BNXT_RE_RX_ATOMIC_REQ].name = "rx_atomic_req",
119+
[BNXT_RE_RX_READ_REQ].name = "rx_read_req",
120+
[BNXT_RE_RX_READ_RESP].name = "rx_read_resp",
121+
[BNXT_RE_RX_WRITE_REQ].name = "rx_write_req",
122+
[BNXT_RE_RX_SEND_REQ].name = "rx_send_req",
123+
[BNXT_RE_RX_ROCE_GOOD_PKTS].name = "rx_roce_good_pkts",
124+
[BNXT_RE_RX_ROCE_GOOD_BYTES].name = "rx_roce_good_bytes",
125+
[BNXT_RE_OOB].name = "rx_out_of_buffer"
128126
};
129127

130128
static void bnxt_re_copy_ext_stats(struct bnxt_re_dev *rdev,
@@ -322,7 +320,6 @@ struct rdma_hw_stats *bnxt_re_ib_alloc_hw_port_stats(struct ib_device *ibdev,
322320
else
323321
num_counters = BNXT_RE_NUM_STD_COUNTERS;
324322

325-
return rdma_alloc_hw_stats_struct(bnxt_re_stat_name,
326-
num_counters,
323+
return rdma_alloc_hw_stats_struct(bnxt_re_stat_descs, num_counters,
327324
RDMA_HW_STATS_DEFAULT_LIFESPAN);
328325
}

drivers/infiniband/hw/cxgb4/provider.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -366,23 +366,23 @@ enum counters {
366366
NR_COUNTERS
367367
};
368368

369-
static const char * const names[] = {
370-
[IP4INSEGS] = "ip4InSegs",
371-
[IP4OUTSEGS] = "ip4OutSegs",
372-
[IP4RETRANSSEGS] = "ip4RetransSegs",
373-
[IP4OUTRSTS] = "ip4OutRsts",
374-
[IP6INSEGS] = "ip6InSegs",
375-
[IP6OUTSEGS] = "ip6OutSegs",
376-
[IP6RETRANSSEGS] = "ip6RetransSegs",
377-
[IP6OUTRSTS] = "ip6OutRsts"
369+
static const struct rdma_stat_desc cxgb4_descs[] = {
370+
[IP4INSEGS].name = "ip4InSegs",
371+
[IP4OUTSEGS].name = "ip4OutSegs",
372+
[IP4RETRANSSEGS].name = "ip4RetransSegs",
373+
[IP4OUTRSTS].name = "ip4OutRsts",
374+
[IP6INSEGS].name = "ip6InSegs",
375+
[IP6OUTSEGS].name = "ip6OutSegs",
376+
[IP6RETRANSSEGS].name = "ip6RetransSegs",
377+
[IP6OUTRSTS].name = "ip6OutRsts"
378378
};
379379

380380
static struct rdma_hw_stats *c4iw_alloc_device_stats(struct ib_device *ibdev)
381381
{
382-
BUILD_BUG_ON(ARRAY_SIZE(names) != NR_COUNTERS);
382+
BUILD_BUG_ON(ARRAY_SIZE(cxgb4_descs) != NR_COUNTERS);
383383

384384
/* FIXME: these look like port stats */
385-
return rdma_alloc_hw_stats_struct(names, NR_COUNTERS,
385+
return rdma_alloc_hw_stats_struct(cxgb4_descs, NR_COUNTERS,
386386
RDMA_HW_STATS_DEFAULT_LIFESPAN);
387387
}
388388

drivers/infiniband/hw/efa/efa_verbs.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,22 @@ struct efa_user_mmap_entry {
6060
op(EFA_RDMA_READ_RESP_BYTES, "rdma_read_resp_bytes") \
6161

6262
#define EFA_STATS_ENUM(ename, name) ename,
63-
#define EFA_STATS_STR(ename, name) [ename] = name,
63+
#define EFA_STATS_STR(ename, nam) \
64+
[ename].name = nam,
6465

6566
enum efa_hw_device_stats {
6667
EFA_DEFINE_DEVICE_STATS(EFA_STATS_ENUM)
6768
};
6869

69-
static const char *const efa_device_stats_names[] = {
70+
static const struct rdma_stat_desc efa_device_stats_descs[] = {
7071
EFA_DEFINE_DEVICE_STATS(EFA_STATS_STR)
7172
};
7273

7374
enum efa_hw_port_stats {
7475
EFA_DEFINE_PORT_STATS(EFA_STATS_ENUM)
7576
};
7677

77-
static const char *const efa_port_stats_names[] = {
78+
static const struct rdma_stat_desc efa_port_stats_descs[] = {
7879
EFA_DEFINE_PORT_STATS(EFA_STATS_STR)
7980
};
8081

@@ -1959,15 +1960,15 @@ int efa_destroy_ah(struct ib_ah *ibah, u32 flags)
19591960
struct rdma_hw_stats *efa_alloc_hw_port_stats(struct ib_device *ibdev,
19601961
u32 port_num)
19611962
{
1962-
return rdma_alloc_hw_stats_struct(efa_port_stats_names,
1963-
ARRAY_SIZE(efa_port_stats_names),
1963+
return rdma_alloc_hw_stats_struct(efa_port_stats_descs,
1964+
ARRAY_SIZE(efa_port_stats_descs),
19641965
RDMA_HW_STATS_DEFAULT_LIFESPAN);
19651966
}
19661967

19671968
struct rdma_hw_stats *efa_alloc_hw_device_stats(struct ib_device *ibdev)
19681969
{
1969-
return rdma_alloc_hw_stats_struct(efa_device_stats_names,
1970-
ARRAY_SIZE(efa_device_stats_names),
1970+
return rdma_alloc_hw_stats_struct(efa_device_stats_descs,
1971+
ARRAY_SIZE(efa_device_stats_descs),
19711972
RDMA_HW_STATS_DEFAULT_LIFESPAN);
19721973
}
19731974

@@ -1992,7 +1993,7 @@ static int efa_fill_device_stats(struct efa_dev *dev,
19921993
stats->value[EFA_CREATE_AH_ERR] = atomic64_read(&s->create_ah_err);
19931994
stats->value[EFA_MMAP_ERR] = atomic64_read(&s->mmap_err);
19941995

1995-
return ARRAY_SIZE(efa_device_stats_names);
1996+
return ARRAY_SIZE(efa_device_stats_descs);
19961997
}
19971998

19981999
static int efa_fill_port_stats(struct efa_dev *dev, struct rdma_hw_stats *stats,
@@ -2041,7 +2042,7 @@ static int efa_fill_port_stats(struct efa_dev *dev, struct rdma_hw_stats *stats,
20412042
stats->value[EFA_RDMA_READ_WR_ERR] = rrs->read_wr_err;
20422043
stats->value[EFA_RDMA_READ_RESP_BYTES] = rrs->read_resp_bytes;
20432044

2044-
return ARRAY_SIZE(efa_port_stats_names);
2045+
return ARRAY_SIZE(efa_port_stats_descs);
20452046
}
20462047

20472048
int efa_get_hw_stats(struct ib_device *ibdev, struct rdma_hw_stats *stats,

0 commit comments

Comments
 (0)