From: Weqaar Janjua <weqaar.a.jan...@intel.com>

[ Upstream commit b69e56cf765155dcac0037d7d0f162a2afab76c2 ]

The txpush program in the xdpsock sample application is supposed
to send out all packets in the umem in a round-robin fashion.
The problem is that it only cycled through the first BATCH_SIZE
worth of packets. Fixed this so that it cycles through all buffers
in the umem as intended.

Fixes: 248c7f9c0e21 ("samples/bpf: convert xdpsock to use libbpf for AF_XDP 
access")
Signed-off-by: Weqaar Janjua <weqaar.a.jan...@intel.com>
Signed-off-by: Daniel Borkmann <dan...@iogearbox.net>
Acked-by: Björn Töpel <bjorn.to...@intel.com>
Link: 
https://lore.kernel.org/bpf/20200828161717.42705-1-weqaar.a.jan...@intel.com
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 samples/bpf/xdpsock_user.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/samples/bpf/xdpsock_user.c b/samples/bpf/xdpsock_user.c
index c91e91362a0c6..0151bb0b2fc71 100644
--- a/samples/bpf/xdpsock_user.c
+++ b/samples/bpf/xdpsock_user.c
@@ -921,7 +921,7 @@ static void rx_drop_all(void)
        }
 }
 
-static void tx_only(struct xsk_socket_info *xsk, u32 frame_nb, int batch_size)
+static void tx_only(struct xsk_socket_info *xsk, u32 *frame_nb, int batch_size)
 {
        u32 idx;
        unsigned int i;
@@ -934,14 +934,14 @@ static void tx_only(struct xsk_socket_info *xsk, u32 
frame_nb, int batch_size)
        for (i = 0; i < batch_size; i++) {
                struct xdp_desc *tx_desc = xsk_ring_prod__tx_desc(&xsk->tx,
                                                                  idx + i);
-               tx_desc->addr = (frame_nb + i) << XSK_UMEM__DEFAULT_FRAME_SHIFT;
+               tx_desc->addr = (*frame_nb + i) << 
XSK_UMEM__DEFAULT_FRAME_SHIFT;
                tx_desc->len = PKT_SIZE;
        }
 
        xsk_ring_prod__submit(&xsk->tx, batch_size);
        xsk->outstanding_tx += batch_size;
-       frame_nb += batch_size;
-       frame_nb %= NUM_FRAMES;
+       *frame_nb += batch_size;
+       *frame_nb %= NUM_FRAMES;
        complete_tx_only(xsk, batch_size);
 }
 
@@ -997,7 +997,7 @@ static void tx_only_all(void)
                }
 
                for (i = 0; i < num_socks; i++)
-                       tx_only(xsks[i], frame_nb[i], batch_size);
+                       tx_only(xsks[i], &frame_nb[i], batch_size);
 
                pkt_cnt += batch_size;
 
-- 
2.25.1



Reply via email to