RDMA/rxe: Make rxe_loopback match rxe_send behavior
authorBob Pearson <rpearsonhpe@gmail.com>
Fri, 29 Mar 2024 14:55:13 +0000 (09:55 -0500)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 22 Apr 2024 19:54:33 +0000 (16:54 -0300)
The rxe send path currently counts the number of skbs outstanding between
the rxe driver and the ethernet driver to prevent too many packets to
accumulate waiting to send. This patch makes the local loopback path
behave the same way. The loopback path forwards the packets to the receive
path which will eventually call kfree_skb on all packets and drop the qp
references. This makes the loopback path more useful for software testing.

Link: https://lore.kernel.org/r/20240329145513.35381-13-rpearsonhpe@gmail.com
Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/sw/rxe/rxe_net.c

index d81440038f916ffc86b384d1272052dde4fbb3fa..d081409450a411f5ba546fe873c136c285784f4e 100644 (file)
@@ -386,6 +386,12 @@ static int rxe_loopback(struct sk_buff *skb, struct rxe_pkt_info *pkt)
 {
        memcpy(SKB_TO_PKT(skb), pkt, sizeof(*pkt));
 
+       skb->destructor = rxe_skb_tx_dtor;
+       skb->sk = pkt->qp->sk->sk;
+
+       rxe_get(pkt->qp);
+       atomic_inc(&pkt->qp->skb_out);
+
        if (skb->protocol == htons(ETH_P_IP))
                skb_pull(skb, sizeof(struct iphdr));
        else