All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com,
	andrew+netdev@lunn.ch, horms@kernel.org,
	Jakub Kicinski <kuba@kernel.org>,
	hawk@kernel.org, ilias.apalodimas@linaro.org, nathan@kernel.org,
	nick.desaulniers+lkml@gmail.com, morbo@google.com,
	justinstitt@google.com, llvm@lists.linux.dev
Subject: [PATCH net-next] page_pool: always add GFP_NOWARN for ATOMIC allocations
Date: Mon,  8 Sep 2025 08:21:23 -0700	[thread overview]
Message-ID: <20250908152123.97829-1-kuba@kernel.org> (raw)

Driver authors often forget to add GFP_NOWARN for page allocation
from the datapath. This is annoying to operators as OOMs are a fact
of life, and we pretty much expect network Rx to hit page allocation
failures during OOM. Make page pool add GFP_NOWARN for ATOMIC allocations
by default.

Don't compare to GFP_ATOMIC because it's a mask with 2 bits set.
We want a single bit so that the compiler can do an unconditional
mask and shift. clang builds the condition as:

    1c31: 89 e8                        	movl	%ebp, %eax
    1c33: 83 e0 20                     	andl	$0x20, %eax
    1c36: c1 e0 0d                     	shll	$0xd, %eax
    1c39: 09 e8                        	orl	%ebp, %eax

so there seems to be no need any more to use the old flag multiplication
tricks which is less readable. Pick the lowest bit out of GFP_ATOMIC
to limit the size of the instructions.

The specific change which makes me propose this is that bnxt, after
commit cd1fafe7da1f ("eth: bnxt: add support rx side device memory TCP"),
lost the GFP_NOWARN, again. It used to allocate with page_pool_dev_alloc_*
which added the NOWARN unconditionally. While switching to
__bnxt_alloc_rx_netmem() authors forgot to add NOWARN in the explicitly
specified flags.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: hawk@kernel.org
CC: ilias.apalodimas@linaro.org
CC: nathan@kernel.org
CC: nick.desaulniers+lkml@gmail.com
CC: morbo@google.com
CC: justinstitt@google.com
CC: llvm@lists.linux.dev
---
 net/core/page_pool.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/net/core/page_pool.c b/net/core/page_pool.c
index ba70569bd4b0..6ffce0e821e4 100644
--- a/net/core/page_pool.c
+++ b/net/core/page_pool.c
@@ -555,6 +555,13 @@ static noinline netmem_ref __page_pool_alloc_netmems_slow(struct page_pool *pool
 	netmem_ref netmem;
 	int i, nr_pages;
 
+	/* Unconditionally set NOWARN if allocating from the datapath.
+	 * Use a single bit from the ATOMIC mask to help compiler optimize.
+	 */
+	BUILD_BUG_ON(!(GFP_ATOMIC & __GFP_HIGH));
+	if (gfp & __GFP_HIGH)
+		gfp |= __GFP_NOWARN;
+
 	/* Don't support bulk alloc for high-order pages */
 	if (unlikely(pp_order))
 		return page_to_netmem(__page_pool_alloc_page_order(pool, gfp));
-- 
2.51.0


             reply	other threads:[~2025-09-08 15:21 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-08 15:21 Jakub Kicinski [this message]
2025-09-08 16:15 ` [PATCH net-next] page_pool: always add GFP_NOWARN for ATOMIC allocations Mina Almasry
2025-09-08 20:20   ` Jakub Kicinski
2025-09-11  0:52 ` Jakub Kicinski
2025-09-11 13:05   ` Jesper Dangaard Brouer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250908152123.97829-1-kuba@kernel.org \
    --to=kuba@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hawk@kernel.org \
    --cc=horms@kernel.org \
    --cc=ilias.apalodimas@linaro.org \
    --cc=justinstitt@google.com \
    --cc=llvm@lists.linux.dev \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nick.desaulniers+lkml@gmail.com \
    --cc=pabeni@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.