]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/rxe: add SENT/RCVD bytes
authorzhenwei pi <zhenwei.pi@linux.dev>
Tue, 14 Apr 2026 06:29:46 +0000 (14:29 +0800)
committerLeon Romanovsky <leon@kernel.org>
Mon, 18 May 2026 08:58:41 +0000 (04:58 -0400)
There is a lack of sent/received counter in bytes.

Signed-off-by: zhenwei pi <zhenwei.pi@linux.dev>
Link: https://patch.msgid.link/20260414062948.671658-3-zhenwei.pi@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/sw/rxe/rxe_hw_counters.c
drivers/infiniband/sw/rxe/rxe_hw_counters.h
drivers/infiniband/sw/rxe/rxe_net.c
drivers/infiniband/sw/rxe/rxe_recv.c
drivers/infiniband/sw/rxe/rxe_verbs.h

index 437917a7d8f2c1f1c71d7d91516cc28efd7b5cfc..17edaa9a9b9b399e51c6405e90421a0d17c58d7c 100644 (file)
@@ -22,6 +22,8 @@ static const struct rdma_stat_desc rxe_counter_descs[] = {
        [RXE_CNT_LINK_DOWNED].name         =  "link_downed",
        [RXE_CNT_RDMA_SEND].name           =  "rdma_sends",
        [RXE_CNT_RDMA_RECV].name           =  "rdma_recvs",
+       [RXE_CNT_SENT_BYTES].name          =  "sent_bytes",
+       [RXE_CNT_RCVD_BYTES].name          =  "rcvd_bytes",
 };
 
 int rxe_ib_get_hw_stats(struct ib_device *ibdev,
index 051f9e1c3852c428fc0a47fc06637e12de980bf4..01b355103cbc38a24000ec3fa2bcface6e84e90a 100644 (file)
@@ -26,6 +26,8 @@ enum rxe_counters {
        RXE_CNT_LINK_DOWNED,
        RXE_CNT_RDMA_SEND,
        RXE_CNT_RDMA_RECV,
+       RXE_CNT_SENT_BYTES,
+       RXE_CNT_RCVD_BYTES,
        RXE_NUM_OF_COUNTERS
 };
 
index 26e70c4ad74986ab6c113e1002c47299b3322802..67415455b1183ac494c26f913916ed90996e6dce 100644 (file)
@@ -501,6 +501,7 @@ int rxe_xmit_packet(struct rxe_qp *qp, struct rxe_pkt_info *pkt,
        int err;
        int is_request = pkt->mask & RXE_REQ_MASK;
        struct rxe_dev *rxe = to_rdev(qp->ibqp.device);
+       unsigned int skblen = skb->len;
        unsigned long flags;
 
        spin_lock_irqsave(&qp->state_lock, flags);
@@ -524,6 +525,7 @@ int rxe_xmit_packet(struct rxe_qp *qp, struct rxe_pkt_info *pkt,
        }
 
        rxe_counter_inc(rxe, RXE_CNT_SENT_PKTS);
+       rxe_counter_add(rxe, RXE_CNT_SENT_BYTES, skblen);
        goto done;
 
 drop:
index f79214738c2b865ab3554cb6528bd4ba5ced40ba..1853014362fd618f89fbe27f3378a936e7572281 100644 (file)
@@ -318,6 +318,7 @@ void rxe_rcv(struct sk_buff *skb)
        int err;
        struct rxe_pkt_info *pkt = SKB_TO_PKT(skb);
        struct rxe_dev *rxe = pkt->rxe;
+       unsigned int skblen = skb->len - skb_network_offset(skb);
 
        if (unlikely(skb->len < RXE_BTH_BYTES))
                goto drop;
@@ -342,6 +343,7 @@ void rxe_rcv(struct sk_buff *skb)
        if (unlikely(err))
                goto drop;
 
+       rxe_counter_add(rxe, RXE_CNT_RCVD_BYTES, skblen);
        rxe_counter_inc(rxe, RXE_CNT_RCVD_PKTS);
 
        if (unlikely(bth_qpn(pkt) == IB_MULTICAST_QPN))
index e800545d1046f805fb437374e846398a0daf0786..0f5ffd94643f92df8fc6ff9fb0011f3e0e19a210 100644 (file)
@@ -455,6 +455,12 @@ static inline void rxe_counter_inc(struct rxe_dev *rxe, enum rxe_counters index)
        atomic64_inc(&rxe->stats_counters[index]);
 }
 
+static inline void rxe_counter_add(struct rxe_dev *rxe, enum rxe_counters index,
+                                  s64 val)
+{
+       atomic64_add(val, &rxe->stats_counters[index]);
+}
+
 static inline struct rxe_dev *to_rdev(struct ib_device *dev)
 {
        return dev ? container_of(dev, struct rxe_dev, ib_dev) : NULL;