]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/irdma: Add GEN3 HW statistics support
authorKrzysztof Czurylo <krzysztof.czurylo@intel.com>
Wed, 27 Aug 2025 15:25:35 +0000 (10:25 -0500)
committerLeon Romanovsky <leon@kernel.org>
Thu, 18 Sep 2025 08:48:45 +0000 (04:48 -0400)
Plug into the unified HW statistics framework by adding a hardware
statistics map array for GEN3, defining the HW-specific width and
location for each counter in the statistics buffer.

Signed-off-by: Krzysztof Czurylo <krzysztof.czurylo@intel.com>
Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com>
Link: https://patch.msgid.link/20250827152545.2056-7-tatyana.e.nikolova@intel.com
Tested-by: Jacob Moroni <jmoroni@google.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/irdma/ctrl.c
drivers/infiniband/hw/irdma/defs.h
drivers/infiniband/hw/irdma/ig3rdma_hw.c
drivers/infiniband/hw/irdma/type.h
drivers/infiniband/hw/irdma/verbs.c

index 3f83ffaf448dda48118e0a47caa14ad2d7fc68ce..26b8905dbc032b8776a8e8543ce8383756c8c37f 100644 (file)
@@ -1968,7 +1968,8 @@ int irdma_vsi_stats_init(struct irdma_sc_vsi *vsi,
                (void *)((uintptr_t)stats_buff_mem->va +
                         IRDMA_GATHER_STATS_BUF_SIZE);
 
-       irdma_hw_stats_start_timer(vsi);
+       if (vsi->dev->hw_attrs.uk_attrs.hw_rev < IRDMA_GEN_3)
+               irdma_hw_stats_start_timer(vsi);
 
        /* when stat allocation is not required default to fcn_id. */
        vsi->stats_idx = info->fcn_id;
@@ -2013,7 +2014,9 @@ void irdma_vsi_stats_free(struct irdma_sc_vsi *vsi)
 
        if (!vsi->pestat)
                return;
-       irdma_hw_stats_stop_timer(vsi);
+
+       if (dev->hw_attrs.uk_attrs.hw_rev < IRDMA_GEN_3)
+               irdma_hw_stats_stop_timer(vsi);
        dma_free_coherent(vsi->pestat->hw->device,
                          vsi->pestat->gather_info.stats_buff_mem.size,
                          vsi->pestat->gather_info.stats_buff_mem.va,
@@ -5929,14 +5932,26 @@ void irdma_cfg_aeq(struct irdma_sc_dev *dev, u32 idx, bool enable)
  */
 void sc_vsi_update_stats(struct irdma_sc_vsi *vsi)
 {
-       struct irdma_gather_stats *gather_stats;
-       struct irdma_gather_stats *last_gather_stats;
+       struct irdma_dev_hw_stats *hw_stats = &vsi->pestat->hw_stats;
+       struct irdma_gather_stats *gather_stats =
+               vsi->pestat->gather_info.gather_stats_va;
+       struct irdma_gather_stats *last_gather_stats =
+               vsi->pestat->gather_info.last_gather_stats_va;
+       const struct irdma_hw_stat_map *map = vsi->dev->hw_stats_map;
+       u16 max_stat_idx = vsi->dev->hw_attrs.max_stat_idx;
+       u16 i;
+
+       if (vsi->dev->hw_attrs.uk_attrs.hw_rev >= IRDMA_GEN_3) {
+               for (i = 0; i < max_stat_idx; i++) {
+                       u16 idx = map[i].byteoff / sizeof(u64);
+
+                       hw_stats->stats_val[i] = gather_stats->val[idx];
+               }
+               return;
+       }
 
-       gather_stats = vsi->pestat->gather_info.gather_stats_va;
-       last_gather_stats = vsi->pestat->gather_info.last_gather_stats_va;
-       irdma_update_stats(&vsi->pestat->hw_stats, gather_stats,
-                          last_gather_stats, vsi->dev->hw_stats_map,
-                          vsi->dev->hw_attrs.max_stat_idx);
+       irdma_update_stats(hw_stats, gather_stats, last_gather_stats,
+                          map, max_stat_idx);
 }
 
 /**
index 52ace06912eb9439f60e599c5a385846d3b7796b..2fc8e3cf4395ca6ea7db7b94bb5d5740d15ae33b 100644 (file)
@@ -415,7 +415,7 @@ enum irdma_cqp_op_type {
 #define IRDMA_CQPSQ_STATS_USE_INST BIT_ULL(61)
 #define IRDMA_CQPSQ_STATS_OP GENMASK_ULL(37, 32)
 #define IRDMA_CQPSQ_STATS_INST_INDEX GENMASK_ULL(6, 0)
-#define IRDMA_CQPSQ_STATS_HMC_FCN_INDEX GENMASK_ULL(5, 0)
+#define IRDMA_CQPSQ_STATS_HMC_FCN_INDEX GENMASK_ULL(15, 0)
 #define IRDMA_CQPSQ_WS_WQEVALID BIT_ULL(63)
 #define IRDMA_CQPSQ_WS_NODEOP GENMASK_ULL(55, 52)
 #define IRDMA_SD_MAX GENMASK_ULL(15, 0)
index 1d582c50e4d23742c637b9c8ec4902848bdb09a9..2a3d7144c77144577a107ee8b7e640c1282a0bf3 100644 (file)
@@ -48,9 +48,70 @@ static const struct irdma_irq_ops ig3rdma_irq_ops = {
        .irdma_en_irq = ig3rdma_ena_irq,
 };
 
+static const struct irdma_hw_stat_map ig3rdma_hw_stat_map[] = {
+       [IRDMA_HW_STAT_INDEX_RXVLANERR] =       {   0, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXOCTS] =       {   8, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXPKTS] =       {  16, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXDISCARD] =    {  24, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXTRUNC] =      {  32, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXFRAGS] =      {  40, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXMCOCTS] =     {  48, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4RXMCPKTS] =     {  56, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXOCTS] =       {  64, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXPKTS] =       {  72, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXDISCARD] =    {  80, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXTRUNC] =      {  88, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXFRAGS] =      {  96, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXMCOCTS] =     { 104, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6RXMCPKTS] =     { 112, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4TXOCTS] =       { 120, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4TXPKTS] =       { 128, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4TXFRAGS] =      { 136, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4TXMCOCTS] =     { 144, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4TXMCPKTS] =     { 152, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6TXOCTS] =       { 160, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6TXPKTS] =       { 168, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6TXFRAGS] =      { 176, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6TXMCOCTS] =     { 184, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6TXMCPKTS] =     { 192, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP4TXNOROUTE] =    { 200, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_IP6TXNOROUTE] =    { 208, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_TCPRTXSEG] =       { 216, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_TCPRXOPTERR] =     { 224, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_TCPRXPROTOERR] =   { 232, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_TCPTXSEG] =        { 240, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_TCPRXSEGS] =       { 248, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_UDPRXPKTS] =       { 256, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_UDPTXPKTS] =       { 264, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMARXWRS] =       { 272, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMARXRDS] =       { 280, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMARXSNDS] =      { 288, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMATXWRS] =       { 296, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMATXRDS] =       { 304, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMATXSNDS] =      { 312, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMAVBND] =        { 320, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMAVINV] =        { 328, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RXNPECNMARKEDPKTS] = { 336, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RXRPCNPHANDLED] =  { 344, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RXRPCNPIGNORED] =  { 352, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_TXNPCNPSENT] =     { 360, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RNR_SENT] =        { 368, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RNR_RCVD] =        { 376, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMAORDLMTCNT] =   { 384, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMAIRDLMTCNT] =   { 392, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMARXATS] =       { 408, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RDMATXATS] =       { 416, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_NAKSEQERR] =       { 424, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_NAKSEQERR_IMPLIED] = { 432, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RTO] =             { 440, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_RXOOOPKTS] =       { 448, 0, 0 },
+       [IRDMA_HW_STAT_INDEX_ICRCERR] =         { 456, 0, 0 },
+};
+
 void ig3rdma_init_hw(struct irdma_sc_dev *dev)
 {
        dev->irq_ops = &ig3rdma_irq_ops;
+       dev->hw_stats_map = ig3rdma_hw_stat_map;
 
        dev->hw_attrs.uk_attrs.hw_rev = IRDMA_GEN_3;
        dev->hw_attrs.uk_attrs.max_hw_wq_frags = IG3RDMA_MAX_WQ_FRAGMENT_COUNT;
@@ -70,6 +131,8 @@ void ig3rdma_init_hw(struct irdma_sc_dev *dev)
        dev->hw_attrs.page_size_cap = SZ_4K | SZ_2M | SZ_1G;
        dev->hw_attrs.max_hw_ird = IG3RDMA_MAX_IRD_SIZE;
        dev->hw_attrs.max_hw_ord = IG3RDMA_MAX_ORD_SIZE;
+       dev->hw_attrs.max_stat_inst = IG3RDMA_MAX_STATS_COUNT;
+       dev->hw_attrs.max_stat_idx = IRDMA_HW_STAT_INDEX_MAX_GEN_3;
        dev->hw_attrs.uk_attrs.min_hw_wq_size = IG3RDMA_MIN_WQ_SIZE;
        dev->hw_attrs.uk_attrs.max_hw_srq_quanta = IRDMA_SRQ_MAX_QUANTA;
        dev->hw_attrs.uk_attrs.max_hw_inline = IG3RDMA_MAX_INLINE_DATA_SIZE;
index 875e3756aa2074e07d4622e031a2b13a09d48c11..5eeb50f5defcf1f92bf9937c2bc89bab1e1bfc64 100644 (file)
@@ -156,6 +156,21 @@ enum irdma_hw_stats_index {
        IRDMA_HW_STAT_INDEX_RXRPCNPIGNORED      = 44,
        IRDMA_HW_STAT_INDEX_TXNPCNPSENT         = 45,
        IRDMA_HW_STAT_INDEX_MAX_GEN_2           = 46,
+
+       /* gen3 */
+       IRDMA_HW_STAT_INDEX_RNR_SENT            = 46,
+       IRDMA_HW_STAT_INDEX_RNR_RCVD            = 47,
+       IRDMA_HW_STAT_INDEX_RDMAORDLMTCNT       = 48,
+       IRDMA_HW_STAT_INDEX_RDMAIRDLMTCNT       = 49,
+       IRDMA_HW_STAT_INDEX_RDMARXATS           = 50,
+       IRDMA_HW_STAT_INDEX_RDMATXATS           = 51,
+       IRDMA_HW_STAT_INDEX_NAKSEQERR           = 52,
+       IRDMA_HW_STAT_INDEX_NAKSEQERR_IMPLIED   = 53,
+       IRDMA_HW_STAT_INDEX_RTO                 = 54,
+       IRDMA_HW_STAT_INDEX_RXOOOPKTS           = 55,
+       IRDMA_HW_STAT_INDEX_ICRCERR             = 56,
+
+       IRDMA_HW_STAT_INDEX_MAX_GEN_3           = 57,
 };
 
 enum irdma_feature_type {
@@ -569,7 +584,7 @@ struct irdma_sc_qp {
 struct irdma_stats_inst_info {
        bool use_hmc_fcn_index;
        u8 hmc_fn_id;
-       u8 stats_idx;
+       u16 stats_idx;
 };
 
 struct irdma_up_info {
@@ -1027,7 +1042,7 @@ struct irdma_qp_host_ctx_info {
        u32 send_cq_num;
        u32 rcv_cq_num;
        u32 rem_endpoint_idx;
-       u8 stats_idx;
+       u16 stats_idx;
        bool srq_valid:1;
        bool tcp_info_valid:1;
        bool iwarp_info_valid:1;
index 1bee1cbf7a4d396965862f943a57190102d78694..894c1f7bcb431ac2d0764395fdb09ece73e06040 100644 (file)
@@ -3923,40 +3923,7 @@ static int irdma_req_notify_cq(struct ib_cq *ibcq,
        return ret;
 }
 
-static int irdma_roce_port_immutable(struct ib_device *ibdev, u32 port_num,
-                                    struct ib_port_immutable *immutable)
-{
-       struct ib_port_attr attr;
-       int err;
-
-       immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
-       err = ib_query_port(ibdev, port_num, &attr);
-       if (err)
-               return err;
-
-       immutable->max_mad_size = IB_MGMT_MAD_SIZE;
-       immutable->pkey_tbl_len = attr.pkey_tbl_len;
-       immutable->gid_tbl_len = attr.gid_tbl_len;
-
-       return 0;
-}
-
-static int irdma_iw_port_immutable(struct ib_device *ibdev, u32 port_num,
-                                  struct ib_port_immutable *immutable)
-{
-       struct ib_port_attr attr;
-       int err;
-
-       immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
-       err = ib_query_port(ibdev, port_num, &attr);
-       if (err)
-               return err;
-       immutable->gid_tbl_len = attr.gid_tbl_len;
-
-       return 0;
-}
-
-static const struct rdma_stat_desc irdma_hw_stat_names[] = {
+static const struct rdma_stat_desc irdma_hw_stat_descs[] = {
        /* gen1 - 32-bit */
        [IRDMA_HW_STAT_INDEX_IP4RXDISCARD].name         = "ip4InDiscards",
        [IRDMA_HW_STAT_INDEX_IP4RXTRUNC].name           = "ip4InTruncatedPkts",
@@ -3964,9 +3931,6 @@ static const struct rdma_stat_desc irdma_hw_stat_names[] = {
        [IRDMA_HW_STAT_INDEX_IP6RXDISCARD].name         = "ip6InDiscards",
        [IRDMA_HW_STAT_INDEX_IP6RXTRUNC].name           = "ip6InTruncatedPkts",
        [IRDMA_HW_STAT_INDEX_IP6TXNOROUTE].name         = "ip6OutNoRoutes",
-       [IRDMA_HW_STAT_INDEX_TCPRTXSEG].name            = "tcpRetransSegs",
-       [IRDMA_HW_STAT_INDEX_TCPRXOPTERR].name          = "tcpInOptErrors",
-       [IRDMA_HW_STAT_INDEX_TCPRXPROTOERR].name        = "tcpInProtoErrors",
        [IRDMA_HW_STAT_INDEX_RXVLANERR].name            = "rxVlanErrors",
        /* gen1 - 64-bit */
        [IRDMA_HW_STAT_INDEX_IP4RXOCTS].name            = "ip4InOctets",
@@ -3985,16 +3949,14 @@ static const struct rdma_stat_desc irdma_hw_stat_names[] = {
        [IRDMA_HW_STAT_INDEX_IP6TXPKTS].name            = "ip6OutPkts",
        [IRDMA_HW_STAT_INDEX_IP6TXFRAGS].name           = "ip6OutSegRqd",
        [IRDMA_HW_STAT_INDEX_IP6TXMCPKTS].name          = "ip6OutMcastPkts",
-       [IRDMA_HW_STAT_INDEX_TCPRXSEGS].name            = "tcpInSegs",
-       [IRDMA_HW_STAT_INDEX_TCPTXSEG].name             = "tcpOutSegs",
-       [IRDMA_HW_STAT_INDEX_RDMARXRDS].name            = "iwInRdmaReads",
-       [IRDMA_HW_STAT_INDEX_RDMARXSNDS].name           = "iwInRdmaSends",
-       [IRDMA_HW_STAT_INDEX_RDMARXWRS].name            = "iwInRdmaWrites",
-       [IRDMA_HW_STAT_INDEX_RDMATXRDS].name            = "iwOutRdmaReads",
-       [IRDMA_HW_STAT_INDEX_RDMATXSNDS].name           = "iwOutRdmaSends",
-       [IRDMA_HW_STAT_INDEX_RDMATXWRS].name            = "iwOutRdmaWrites",
-       [IRDMA_HW_STAT_INDEX_RDMAVBND].name             = "iwRdmaBnd",
-       [IRDMA_HW_STAT_INDEX_RDMAVINV].name             = "iwRdmaInv",
+       [IRDMA_HW_STAT_INDEX_RDMARXRDS].name            = "InRdmaReads",
+       [IRDMA_HW_STAT_INDEX_RDMARXSNDS].name           = "InRdmaSends",
+       [IRDMA_HW_STAT_INDEX_RDMARXWRS].name            = "InRdmaWrites",
+       [IRDMA_HW_STAT_INDEX_RDMATXRDS].name            = "OutRdmaReads",
+       [IRDMA_HW_STAT_INDEX_RDMATXSNDS].name           = "OutRdmaSends",
+       [IRDMA_HW_STAT_INDEX_RDMATXWRS].name            = "OutRdmaWrites",
+       [IRDMA_HW_STAT_INDEX_RDMAVBND].name             = "RdmaBnd",
+       [IRDMA_HW_STAT_INDEX_RDMAVINV].name             = "RdmaInv",
 
        /* gen2 - 32-bit */
        [IRDMA_HW_STAT_INDEX_RXRPCNPHANDLED].name       = "cnpHandled",
@@ -4008,9 +3970,59 @@ static const struct rdma_stat_desc irdma_hw_stat_names[] = {
        [IRDMA_HW_STAT_INDEX_UDPRXPKTS].name            = "RxUDP",
        [IRDMA_HW_STAT_INDEX_UDPTXPKTS].name            = "TxUDP",
        [IRDMA_HW_STAT_INDEX_RXNPECNMARKEDPKTS].name    = "RxECNMrkd",
-
+       [IRDMA_HW_STAT_INDEX_TCPRTXSEG].name            = "RetransSegs",
+       [IRDMA_HW_STAT_INDEX_TCPRXOPTERR].name          = "InOptErrors",
+       [IRDMA_HW_STAT_INDEX_TCPRXPROTOERR].name        = "InProtoErrors",
+       [IRDMA_HW_STAT_INDEX_TCPRXSEGS].name            = "InSegs",
+       [IRDMA_HW_STAT_INDEX_TCPTXSEG].name             = "OutSegs",
+
+       /* gen3 */
+       [IRDMA_HW_STAT_INDEX_RNR_SENT].name             = "RNR sent",
+       [IRDMA_HW_STAT_INDEX_RNR_RCVD].name             = "RNR received",
+       [IRDMA_HW_STAT_INDEX_RDMAORDLMTCNT].name        = "ord limit count",
+       [IRDMA_HW_STAT_INDEX_RDMAIRDLMTCNT].name        = "ird limit count",
+       [IRDMA_HW_STAT_INDEX_RDMARXATS].name            = "Rx atomics",
+       [IRDMA_HW_STAT_INDEX_RDMATXATS].name            = "Tx atomics",
+       [IRDMA_HW_STAT_INDEX_NAKSEQERR].name            = "Nak Sequence Error",
+       [IRDMA_HW_STAT_INDEX_NAKSEQERR_IMPLIED].name    = "Nak Sequence Error Implied",
+       [IRDMA_HW_STAT_INDEX_RTO].name                  = "RTO",
+       [IRDMA_HW_STAT_INDEX_RXOOOPKTS].name            = "Rcvd Out of order packets",
+       [IRDMA_HW_STAT_INDEX_ICRCERR].name              = "CRC errors",
 };
 
+static int irdma_roce_port_immutable(struct ib_device *ibdev, u32 port_num,
+                                    struct ib_port_immutable *immutable)
+{
+       struct ib_port_attr attr;
+       int err;
+
+       immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
+       err = ib_query_port(ibdev, port_num, &attr);
+       if (err)
+               return err;
+
+       immutable->max_mad_size = IB_MGMT_MAD_SIZE;
+       immutable->pkey_tbl_len = attr.pkey_tbl_len;
+       immutable->gid_tbl_len = attr.gid_tbl_len;
+
+       return 0;
+}
+
+static int irdma_iw_port_immutable(struct ib_device *ibdev, u32 port_num,
+                                  struct ib_port_immutable *immutable)
+{
+       struct ib_port_attr attr;
+       int err;
+
+       immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
+       err = ib_query_port(ibdev, port_num, &attr);
+       if (err)
+               return err;
+       immutable->gid_tbl_len = attr.gid_tbl_len;
+
+       return 0;
+}
+
 static void irdma_get_dev_fw_str(struct ib_device *dev, char *str)
 {
        struct irdma_device *iwdev = to_iwdev(dev);
@@ -4034,7 +4046,7 @@ static struct rdma_hw_stats *irdma_alloc_hw_port_stats(struct ib_device *ibdev,
        int num_counters = dev->hw_attrs.max_stat_idx;
        unsigned long lifespan = RDMA_HW_STATS_DEFAULT_LIFESPAN;
 
-       return rdma_alloc_hw_stats_struct(irdma_hw_stat_names, num_counters,
+       return rdma_alloc_hw_stats_struct(irdma_hw_stat_descs, num_counters,
                                          lifespan);
 }