1 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
3 * Copyright (c) 2017 Mellanox Technologies Ltd. All rights reserved.
7 #include "rxe_hw_counters.h"
9 static const char * const rxe_counter_name
[] = {
10 [RXE_CNT_SENT_PKTS
] = "sent_pkts",
11 [RXE_CNT_RCVD_PKTS
] = "rcvd_pkts",
12 [RXE_CNT_DUP_REQ
] = "duplicate_request",
13 [RXE_CNT_OUT_OF_SEQ_REQ
] = "out_of_seq_request",
14 [RXE_CNT_RCV_RNR
] = "rcvd_rnr_err",
15 [RXE_CNT_SND_RNR
] = "send_rnr_err",
16 [RXE_CNT_RCV_SEQ_ERR
] = "rcvd_seq_err",
17 [RXE_CNT_COMPLETER_SCHED
] = "ack_deferred",
18 [RXE_CNT_RETRY_EXCEEDED
] = "retry_exceeded_err",
19 [RXE_CNT_RNR_RETRY_EXCEEDED
] = "retry_rnr_exceeded_err",
20 [RXE_CNT_COMP_RETRY
] = "completer_retry_err",
21 [RXE_CNT_SEND_ERR
] = "send_err",
22 [RXE_CNT_LINK_DOWNED
] = "link_downed",
23 [RXE_CNT_RDMA_SEND
] = "rdma_sends",
24 [RXE_CNT_RDMA_RECV
] = "rdma_recvs",
27 int rxe_ib_get_hw_stats(struct ib_device
*ibdev
,
28 struct rdma_hw_stats
*stats
,
31 struct rxe_dev
*dev
= to_rdev(ibdev
);
37 for (cnt
= 0; cnt
< ARRAY_SIZE(rxe_counter_name
); cnt
++)
38 stats
->value
[cnt
] = atomic64_read(&dev
->stats_counters
[cnt
]);
40 return ARRAY_SIZE(rxe_counter_name
);
43 struct rdma_hw_stats
*rxe_ib_alloc_hw_stats(struct ib_device
*ibdev
,
46 BUILD_BUG_ON(ARRAY_SIZE(rxe_counter_name
) != RXE_NUM_OF_COUNTERS
);
47 /* We support only per port stats */
51 return rdma_alloc_hw_stats_struct(rxe_counter_name
,
52 ARRAY_SIZE(rxe_counter_name
),
53 RDMA_HW_STATS_DEFAULT_LIFESPAN
);