From: Sebastian Andrzej Siewior Date: Mon, 12 May 2025 09:27:22 +0000 (+0200) Subject: net: page_pool: Don't recycle into cache on PREEMPT_RT X-Git-Tag: v6.16-rc1~132^2~101^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32471b2f481dea8624f27669d36ffd131d24b732;p=thirdparty%2Fkernel%2Flinux.git net: page_pool: Don't recycle into cache on PREEMPT_RT With preemptible softirq and no per-CPU locking in local_bh_disable() on PREEMPT_RT the consumer can be preempted while a skb is returned. Avoid the race by disabling the recycle into the cache on PREEMPT_RT. Cc: Jesper Dangaard Brouer Cc: Ilias Apalodimas Signed-off-by: Sebastian Andrzej Siewior Link: https://patch.msgid.link/20250512092736.229935-2-bigeasy@linutronix.de Signed-off-by: Paolo Abeni --- diff --git a/net/core/page_pool.c b/net/core/page_pool.c index 2b76848659418..974f3eef2efaf 100644 --- a/net/core/page_pool.c +++ b/net/core/page_pool.c @@ -839,6 +839,10 @@ static bool page_pool_napi_local(const struct page_pool *pool) const struct napi_struct *napi; u32 cpuid; + /* On PREEMPT_RT the softirq can be preempted by the consumer */ + if (IS_ENABLED(CONFIG_PREEMPT_RT)) + return false; + if (unlikely(!in_softirq())) return false;