]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xsk: use __xsk_rcv_zc_safe for ZC multi-buffer Rx processing
authorMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Mon, 16 Mar 2026 14:05:57 +0000 (15:05 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 18 Mar 2026 01:58:55 +0000 (18:58 -0700)
Commit f620af11c27b ("xsk: avoid double checking against rx queue being
full") addressed a case in copy mode, when working with multi-buffer
xdp_buff, where we were peeking onto XSK Rx queue twice, to find out if
there is a space to produce descriptors.

Adjust ZC path to follow the same principle.

Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20260316140557.461288-1-maciej.fijalkowski@intel.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
net/xdp/xsk.c

index c078c9e4b2432e5cc4a9104cb94bde4c47097f0d..fbc51a4062c48426e2823dd8eeb125af92666d6b 100644 (file)
@@ -196,13 +196,13 @@ static int xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
                goto err;
        }
 
-       __xsk_rcv_zc(xs, xskb, len, contd);
+       __xsk_rcv_zc_safe(xs, xskb, len, contd);
        xskb_list = &xskb->pool->xskb_list;
        list_for_each_entry_safe(pos, tmp, xskb_list, list_node) {
                if (list_is_singular(xskb_list))
                        contd = 0;
                len = pos->xdp.data_end - pos->xdp.data;
-               __xsk_rcv_zc(xs, pos, len, contd);
+               __xsk_rcv_zc_safe(xs, pos, len, contd);
                list_del_init(&pos->list_node);
        }