FAILED: Patch "xdp: fix xdp_return_frame() kernel BUG throw for page_pool memory model" failed to apply to 5.4-stable tree
Subsystems (3)
Sasha Levin
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Thanks,
Sasha
------------------ original commit in Linus's tree ------------------
From 622d13694b5f048c01caa7ba548498d9880d4cb0 Mon Sep 17 00:00:00 2001
From: Ong Boon Leong <[email protected]>
Date: Wed, 31 Mar 2021 21:25:03 +0800
Subject: [PATCH] xdp: fix xdp_return_frame() kernel BUG throw for page_pool
memory model
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!
--- net/core/xdp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/core/xdp.c +2 -1
@@ -350,7 +350,8 @@ static void __xdp_return(void *data, struct xdp_mem_info *mem, bool napi_direct,/* mem->id is valid, checked in xdp_rxq_info_reg_mem_model() */ xa =rhashtable_lookup (mem_id_ht, &mem->id, mem_id_rht_params); page =virt_to_head_page (data); - napi_direct &= !xdp_return_frame_no_direct (); +if (napi_direct &&xdp_return_frame_no_direct ()) + napi_direct = false;page_pool_put_full_page (xa->page_pool, page, napi_direct);rcu_read_unlock ();break ;
Signature · 1 line
2.30.2