1 | // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB |
2 | /* |
3 | * Copyright (c) 2017 Mellanox Technologies Ltd. All rights reserved. |
4 | */ |
5 | |
6 | #include "rxe.h" |
7 | #include "rxe_hw_counters.h" |
8 | |
9 | static const struct rdma_stat_desc rxe_counter_descs[] = { |
10 | [RXE_CNT_SENT_PKTS].name = "sent_pkts" , |
11 | [RXE_CNT_RCVD_PKTS].name = "rcvd_pkts" , |
12 | [RXE_CNT_DUP_REQ].name = "duplicate_request" , |
13 | [RXE_CNT_OUT_OF_SEQ_REQ].name = "out_of_seq_request" , |
14 | [RXE_CNT_RCV_RNR].name = "rcvd_rnr_err" , |
15 | [RXE_CNT_SND_RNR].name = "send_rnr_err" , |
16 | [RXE_CNT_RCV_SEQ_ERR].name = "rcvd_seq_err" , |
17 | [RXE_CNT_COMPLETER_SCHED].name = "ack_deferred" , |
18 | [RXE_CNT_RETRY_EXCEEDED].name = "retry_exceeded_err" , |
19 | [RXE_CNT_RNR_RETRY_EXCEEDED].name = "retry_rnr_exceeded_err" , |
20 | [RXE_CNT_COMP_RETRY].name = "completer_retry_err" , |
21 | [RXE_CNT_SEND_ERR].name = "send_err" , |
22 | [RXE_CNT_LINK_DOWNED].name = "link_downed" , |
23 | [RXE_CNT_RDMA_SEND].name = "rdma_sends" , |
24 | [RXE_CNT_RDMA_RECV].name = "rdma_recvs" , |
25 | }; |
26 | |
27 | int rxe_ib_get_hw_stats(struct ib_device *ibdev, |
28 | struct rdma_hw_stats *stats, |
29 | u32 port, int index) |
30 | { |
31 | struct rxe_dev *dev = to_rdev(dev: ibdev); |
32 | unsigned int cnt; |
33 | |
34 | if (!port || !stats) |
35 | return -EINVAL; |
36 | |
37 | for (cnt = 0; cnt < ARRAY_SIZE(rxe_counter_descs); cnt++) |
38 | stats->value[cnt] = atomic64_read(v: &dev->stats_counters[cnt]); |
39 | |
40 | return ARRAY_SIZE(rxe_counter_descs); |
41 | } |
42 | |
43 | struct rdma_hw_stats *rxe_ib_alloc_hw_port_stats(struct ib_device *ibdev, |
44 | u32 port_num) |
45 | { |
46 | BUILD_BUG_ON(ARRAY_SIZE(rxe_counter_descs) != RXE_NUM_OF_COUNTERS); |
47 | |
48 | return rdma_alloc_hw_stats_struct(descs: rxe_counter_descs, |
49 | ARRAY_SIZE(rxe_counter_descs), |
50 | RDMA_HW_STATS_DEFAULT_LIFESPAN); |
51 | } |
52 | |