• Ong Boon Leong's avatar
    xdp: fix xdp_return_frame() kernel BUG throw for page_pool memory model · 622d1369
    Ong Boon Leong authored
    xdp_return_frame() may be called outside of NAPI context to return
    xdpf back to page_pool. xdp_return_frame() calls __xdp_return() with
    napi_direct = false. For page_pool memory model, __xdp_return() calls
    xdp_return_frame_no_direct() unconditionally and below false negative
    kernel BUG throw happened under preempt-rt build:
    
    [  430.450355] BUG: using smp_processor_id() in preemptible [00000000] code: modprobe/3884
    [  430.451678] caller is __xdp_return+0x1ff/0x2e0
    [  430.452111] CPU: 0 PID: 3884 Comm: modprobe Tainted: G     U      E     5.12.0-rc2+ #45
    
    Changes in v2:
     - This patch fixes the issue by making xdp_return_frame_no_direct() is
       only called if napi_direct = true, as recommended for better by
       Jesper Dangaard Brouer. Thanks!
    
    Fixes: 2539650f ("xdp: Helpers for disabling napi_direct of xdp_return_frame")
    Signed-off-by: default avatarOng Boon Leong <boon.leong.ong@intel.com>
    Acked-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    622d1369
xdp.c 14 KB