From 2b9efc3752675c5208eb496aa9de239696aeb435 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 2 Jul 2025 09:51:50 +0000 Subject: [PATCH] Revert "net: page_pool: avoid false positive warning if NAPI was never added" This reverts commit 247b420fea7988dca0e1287f1d4eb1e0b16b20f1 which is commit c1e00bc4be06cacee6307cedb9b55bbaddb5044d upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I5ed1598f3985ad8b7b6de88577a980f1f87b2d0f Signed-off-by: Greg Kroah-Hartman --- net/core/dev.h | 12 ------------ net/core/page_pool.c | 7 +++++-- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/net/core/dev.h b/net/core/dev.h index 764e0097ccf2..2e3bb7669984 100644 --- a/net/core/dev.h +++ b/net/core/dev.h @@ -148,18 +148,6 @@ void xdp_do_check_flushed(struct napi_struct *napi); static inline void xdp_do_check_flushed(struct napi_struct *napi) { } #endif -/* Best effort check that NAPI is not idle (can't be scheduled to run) */ -static inline void napi_assert_will_not_race(const struct napi_struct *napi) -{ - /* uninitialized instance, can't race */ - if (!napi->poll_list.next) - return; - - /* SCHED bit is set on disabled instances */ - WARN_ON(!test_bit(NAPI_STATE_SCHED, &napi->state)); - WARN_ON(READ_ONCE(napi->list_owner) != -1); -} - void kick_defer_list_purge(struct softnet_data *sd, unsigned int cpu); #define XMIT_RECURSION_LIMIT 8 diff --git a/net/core/page_pool.c b/net/core/page_pool.c index c8ce069605c4..7b20f6fcb82c 100644 --- a/net/core/page_pool.c +++ b/net/core/page_pool.c @@ -25,7 +25,6 @@ #include -#include "dev.h" #include "mp_dmabuf_devmem.h" #include "netmem_priv.h" #include "page_pool_priv.h" @@ -1109,7 +1108,11 @@ void page_pool_disable_direct_recycling(struct page_pool *pool) if (!pool->p.napi) return; - napi_assert_will_not_race(pool->p.napi); + /* To avoid races with recycling and additional barriers make sure + * pool and NAPI are unlinked when NAPI is disabled. + */ + WARN_ON(!test_bit(NAPI_STATE_SCHED, &pool->p.napi->state)); + WARN_ON(READ_ONCE(pool->p.napi->list_owner) != -1); WRITE_ONCE(pool->p.napi, NULL); }