lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 188/633] samples/bpf: Fix to xdpsock to avoid recycling frames
    Date
    From: Weqaar Janjua <weqaar.a.janjua@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.janjua@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Björn Töpel <bjorn.topel@intel.com>
    Link: https://lore.kernel.org/bpf/20200828161717.42705-1-weqaar.a.janjua@intel.com
    Signed-off-by: Sasha Levin <sashal@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


    \
     
     \ /
      Last update: 2020-10-27 16:10    [W:3.341 / U:0.324 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site