Thread (9 messages) 9 messages, 3 authors, 2025-10-23

Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov

From: Byungchul Park <byungchul@sk.com>
Date: 2025-10-23 08:27:56
Also in: io-uring, lkml

On Fri, Oct 17, 2025 at 01:33:43PM +0100, Pavel Begunkov wrote:
On 10/16/25 08:21, Byungchul Park wrote:
quoted
On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
quoted
->pp_magic field in struct page is current used to identify if a page
belongs to a page pool.  However, ->pp_magic will be removed and page
type bit in struct page e.g. PGTY_netpp should be used for that purpose.

As a preparation, the check for net_iov, that is not page-backed, should
avoid using ->pp_magic since net_iov doens't have to do with page type.
Instead, nmdesc->pp can be used if a net_iov or its nmdesc belongs to a
page pool, by making sure nmdesc->pp is NULL otherwise.

For page-backed netmem, just leave unchanged as is, while for net_iov,
make sure nmdesc->pp is initialized to NULL and use nmdesc->pp for the
check.
IIRC,

Suggested-by: Pavel Begunkov <asml.silence@gmail.com>
Pointing out a problem in a patch with a fix doesn't qualify to
me as "suggested-by", you don't need to worry about that.

Did you get the PGTY bits merged? There is some uneasiness about
this patch as it does nothing good by itself, it'd be much better
to have it in a series finalising the page_pool conversion. And
I also considered that.  However, I think the finalizing e.i. removing
pp fields in struct page, would better be done once every thing else has
been ready, so that I can focus on examining more thoroughly if there
aren't accesses through struct page and it can be fianlized safely :-)

	Byungchul
I don't think it simplify merging anyhow, hmm?

...>> diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
quoted
quoted
index 723e4266b91f..cf78227c0ca6 100644
--- a/io_uring/zcrx.c
+++ b/io_uring/zcrx.c
@@ -450,6 +450,10 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
             area->freelist[i] = i;
             atomic_set(&area->user_refs[i], 0);
             niov->type = NET_IOV_IOURING;
+
+            /* niov->desc.pp is already initialized to NULL by
+             * kvmalloc_array(__GFP_ZERO).
+             */
Please drop this hunk if you'll be resubmitting, it's not
needed.

--
Pavel Begunkov
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help