* [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
@ 2025-10-16 6:36 Byungchul Park
2025-10-16 7:21 ` Byungchul Park
2025-10-16 23:31 ` Byungchul Park
0 siblings, 2 replies; 9+ messages in thread
From: Byungchul Park @ 2025-10-16 6:36 UTC (permalink / raw)
To: axboe, kuba, pabeni, almasrymina, asml.silence
Cc: davem, edumazet, horms, hawk, ilias.apalodimas, sdf, dw, ap420073,
dtatulea, byungchul, toke, io-uring, linux-kernel, netdev,
kernel_team, max.byungchul.park
->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.
Signed-off-by: Byungchul Park <byungchul@sk.com>
---
io_uring/zcrx.c | 4 ++++
net/core/devmem.c | 1 +
net/core/netmem_priv.h | 6 ++++++
net/core/page_pool.c | 16 ++++++++++++++--
4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
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).
+ */
}
area->free_count = nr_iovs;
diff --git a/net/core/devmem.c b/net/core/devmem.c
index d9de31a6cc7f..f81b700f1fd1 100644
--- a/net/core/devmem.c
+++ b/net/core/devmem.c
@@ -291,6 +291,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
niov = &owner->area.niovs[i];
niov->type = NET_IOV_DMABUF;
niov->owner = &owner->area;
+ niov->desc.pp = NULL;
page_pool_set_dma_addr_netmem(net_iov_to_netmem(niov),
net_devmem_get_dma_addr(niov));
if (direction == DMA_TO_DEVICE)
diff --git a/net/core/netmem_priv.h b/net/core/netmem_priv.h
index 23175cb2bd86..fb21cc19176b 100644
--- a/net/core/netmem_priv.h
+++ b/net/core/netmem_priv.h
@@ -22,6 +22,12 @@ static inline void netmem_clear_pp_magic(netmem_ref netmem)
static inline bool netmem_is_pp(netmem_ref netmem)
{
+ /* Use ->pp for net_iov to identify if it's pp, which requires
+ * that non-pp net_iov should have ->pp NULL'd.
+ */
+ if (netmem_is_net_iov(netmem))
+ return !!netmem_to_nmdesc(netmem)->pp;
+
return (netmem_get_pp_magic(netmem) & PP_MAGIC_MASK) == PP_SIGNATURE;
}
diff --git a/net/core/page_pool.c b/net/core/page_pool.c
index 1a5edec485f1..2756b78754b0 100644
--- a/net/core/page_pool.c
+++ b/net/core/page_pool.c
@@ -699,7 +699,13 @@ s32 page_pool_inflight(const struct page_pool *pool, bool strict)
void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
{
netmem_set_pp(netmem, pool);
- netmem_or_pp_magic(netmem, PP_SIGNATURE);
+
+ /* For page-backed, pp_magic is used to identify if it's pp.
+ * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
+ * and nmdesc->pp is NULL if it's not.
+ */
+ if (!netmem_is_net_iov(netmem))
+ netmem_or_pp_magic(netmem, PP_SIGNATURE);
/* Ensuring all pages have been split into one fragment initially:
* page_pool_set_pp_info() is only called once for every page when it
@@ -714,7 +720,13 @@ void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
void page_pool_clear_pp_info(netmem_ref netmem)
{
- netmem_clear_pp_magic(netmem);
+ /* For page-backed, pp_magic is used to identify if it's pp.
+ * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
+ * and nmdesc->pp is NULL if it's not.
+ */
+ if (!netmem_is_net_iov(netmem))
+ netmem_clear_pp_magic(netmem);
+
netmem_set_pp(netmem, NULL);
}
base-commit: e1f5bb196f0b0eee197e06d361f8ac5f091c2963
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-16 6:36 [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov Byungchul Park
@ 2025-10-16 7:21 ` Byungchul Park
2025-10-17 12:33 ` Pavel Begunkov
2025-10-16 23:31 ` Byungchul Park
1 sibling, 1 reply; 9+ messages in thread
From: Byungchul Park @ 2025-10-16 7:21 UTC (permalink / raw)
To: axboe, kuba, pabeni, almasrymina, asml.silence
Cc: davem, edumazet, horms, hawk, ilias.apalodimas, sdf, dw, ap420073,
dtatulea, toke, io-uring, linux-kernel, netdev, kernel_team,
max.byungchul.park
On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> ->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>
Byungchul
> Signed-off-by: Byungchul Park <byungchul@sk.com>
> ---
> io_uring/zcrx.c | 4 ++++
> net/core/devmem.c | 1 +
> net/core/netmem_priv.h | 6 ++++++
> net/core/page_pool.c | 16 ++++++++++++++--
> 4 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
> 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).
> + */
> }
>
> area->free_count = nr_iovs;
> diff --git a/net/core/devmem.c b/net/core/devmem.c
> index d9de31a6cc7f..f81b700f1fd1 100644
> --- a/net/core/devmem.c
> +++ b/net/core/devmem.c
> @@ -291,6 +291,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
> niov = &owner->area.niovs[i];
> niov->type = NET_IOV_DMABUF;
> niov->owner = &owner->area;
> + niov->desc.pp = NULL;
> page_pool_set_dma_addr_netmem(net_iov_to_netmem(niov),
> net_devmem_get_dma_addr(niov));
> if (direction == DMA_TO_DEVICE)
> diff --git a/net/core/netmem_priv.h b/net/core/netmem_priv.h
> index 23175cb2bd86..fb21cc19176b 100644
> --- a/net/core/netmem_priv.h
> +++ b/net/core/netmem_priv.h
> @@ -22,6 +22,12 @@ static inline void netmem_clear_pp_magic(netmem_ref netmem)
>
> static inline bool netmem_is_pp(netmem_ref netmem)
> {
> + /* Use ->pp for net_iov to identify if it's pp, which requires
> + * that non-pp net_iov should have ->pp NULL'd.
> + */
> + if (netmem_is_net_iov(netmem))
> + return !!netmem_to_nmdesc(netmem)->pp;
> +
> return (netmem_get_pp_magic(netmem) & PP_MAGIC_MASK) == PP_SIGNATURE;
> }
>
> diff --git a/net/core/page_pool.c b/net/core/page_pool.c
> index 1a5edec485f1..2756b78754b0 100644
> --- a/net/core/page_pool.c
> +++ b/net/core/page_pool.c
> @@ -699,7 +699,13 @@ s32 page_pool_inflight(const struct page_pool *pool, bool strict)
> void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
> {
> netmem_set_pp(netmem, pool);
> - netmem_or_pp_magic(netmem, PP_SIGNATURE);
> +
> + /* For page-backed, pp_magic is used to identify if it's pp.
> + * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
> + * and nmdesc->pp is NULL if it's not.
> + */
> + if (!netmem_is_net_iov(netmem))
> + netmem_or_pp_magic(netmem, PP_SIGNATURE);
>
> /* Ensuring all pages have been split into one fragment initially:
> * page_pool_set_pp_info() is only called once for every page when it
> @@ -714,7 +720,13 @@ void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
>
> void page_pool_clear_pp_info(netmem_ref netmem)
> {
> - netmem_clear_pp_magic(netmem);
> + /* For page-backed, pp_magic is used to identify if it's pp.
> + * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
> + * and nmdesc->pp is NULL if it's not.
> + */
> + if (!netmem_is_net_iov(netmem))
> + netmem_clear_pp_magic(netmem);
> +
> netmem_set_pp(netmem, NULL);
> }
>
>
> base-commit: e1f5bb196f0b0eee197e06d361f8ac5f091c2963
> --
> 2.17.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-16 6:36 [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov Byungchul Park
2025-10-16 7:21 ` Byungchul Park
@ 2025-10-16 23:31 ` Byungchul Park
2025-10-17 6:26 ` Byungchul Park
1 sibling, 1 reply; 9+ messages in thread
From: Byungchul Park @ 2025-10-16 23:31 UTC (permalink / raw)
To: axboe, kuba, pabeni, almasrymina, asml.silence
Cc: davem, edumazet, horms, hawk, ilias.apalodimas, sdf, dw, ap420073,
dtatulea, toke, io-uring, linux-kernel, netdev, kernel_team,
max.byungchul.park, ziy, willy, david
On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> ->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.
+cc David Hildenbrand <david@redhat.com>
+cc Zi Yan <ziy@nvidia.com>
+cc willy@infradead.org
Byungchul
>
> Signed-off-by: Byungchul Park <byungchul@sk.com>
> ---
> io_uring/zcrx.c | 4 ++++
> net/core/devmem.c | 1 +
> net/core/netmem_priv.h | 6 ++++++
> net/core/page_pool.c | 16 ++++++++++++++--
> 4 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
> 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).
> + */
> }
>
> area->free_count = nr_iovs;
> diff --git a/net/core/devmem.c b/net/core/devmem.c
> index d9de31a6cc7f..f81b700f1fd1 100644
> --- a/net/core/devmem.c
> +++ b/net/core/devmem.c
> @@ -291,6 +291,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
> niov = &owner->area.niovs[i];
> niov->type = NET_IOV_DMABUF;
> niov->owner = &owner->area;
> + niov->desc.pp = NULL;
> page_pool_set_dma_addr_netmem(net_iov_to_netmem(niov),
> net_devmem_get_dma_addr(niov));
> if (direction == DMA_TO_DEVICE)
> diff --git a/net/core/netmem_priv.h b/net/core/netmem_priv.h
> index 23175cb2bd86..fb21cc19176b 100644
> --- a/net/core/netmem_priv.h
> +++ b/net/core/netmem_priv.h
> @@ -22,6 +22,12 @@ static inline void netmem_clear_pp_magic(netmem_ref netmem)
>
> static inline bool netmem_is_pp(netmem_ref netmem)
> {
> + /* Use ->pp for net_iov to identify if it's pp, which requires
> + * that non-pp net_iov should have ->pp NULL'd.
> + */
> + if (netmem_is_net_iov(netmem))
> + return !!netmem_to_nmdesc(netmem)->pp;
> +
> return (netmem_get_pp_magic(netmem) & PP_MAGIC_MASK) == PP_SIGNATURE;
> }
>
> diff --git a/net/core/page_pool.c b/net/core/page_pool.c
> index 1a5edec485f1..2756b78754b0 100644
> --- a/net/core/page_pool.c
> +++ b/net/core/page_pool.c
> @@ -699,7 +699,13 @@ s32 page_pool_inflight(const struct page_pool *pool, bool strict)
> void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
> {
> netmem_set_pp(netmem, pool);
> - netmem_or_pp_magic(netmem, PP_SIGNATURE);
> +
> + /* For page-backed, pp_magic is used to identify if it's pp.
> + * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
> + * and nmdesc->pp is NULL if it's not.
> + */
> + if (!netmem_is_net_iov(netmem))
> + netmem_or_pp_magic(netmem, PP_SIGNATURE);
>
> /* Ensuring all pages have been split into one fragment initially:
> * page_pool_set_pp_info() is only called once for every page when it
> @@ -714,7 +720,13 @@ void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
>
> void page_pool_clear_pp_info(netmem_ref netmem)
> {
> - netmem_clear_pp_magic(netmem);
> + /* For page-backed, pp_magic is used to identify if it's pp.
> + * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
> + * and nmdesc->pp is NULL if it's not.
> + */
> + if (!netmem_is_net_iov(netmem))
> + netmem_clear_pp_magic(netmem);
> +
> netmem_set_pp(netmem, NULL);
> }
>
>
> base-commit: e1f5bb196f0b0eee197e06d361f8ac5f091c2963
> --
> 2.17.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-16 23:31 ` Byungchul Park
@ 2025-10-17 6:26 ` Byungchul Park
0 siblings, 0 replies; 9+ messages in thread
From: Byungchul Park @ 2025-10-17 6:26 UTC (permalink / raw)
To: almasrymina
Cc: davem, edumazet, horms, hawk, ilias.apalodimas, sdf, dw, ap420073,
dtatulea, toke, io-uring, linux-kernel, netdev, kernel_team,
max.byungchul.park, ziy, willy, david, axboe, kuba, pabeni,
asml.silence
On Fri, Oct 17, 2025 at 08:31:39AM +0900, Byungchul Park wrote:
> On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> > ->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.
Hi Mina,
This patch extracts the network part from the following work:
https://lore.kernel.org/all/20250729110210.48313-1-byungchul@sk.com/
Can I keep your reviewed-by tag on this patch?
Reviewed-by: Mina Almasry <almasrymina@google.com>
Byungchul
> +cc David Hildenbrand <david@redhat.com>
> +cc Zi Yan <ziy@nvidia.com>
> +cc willy@infradead.org
>
> Byungchul
> >
> > Signed-off-by: Byungchul Park <byungchul@sk.com>
> > ---
> > io_uring/zcrx.c | 4 ++++
> > net/core/devmem.c | 1 +
> > net/core/netmem_priv.h | 6 ++++++
> > net/core/page_pool.c | 16 ++++++++++++++--
> > 4 files changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
> > 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).
> > + */
> > }
> >
> > area->free_count = nr_iovs;
> > diff --git a/net/core/devmem.c b/net/core/devmem.c
> > index d9de31a6cc7f..f81b700f1fd1 100644
> > --- a/net/core/devmem.c
> > +++ b/net/core/devmem.c
> > @@ -291,6 +291,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
> > niov = &owner->area.niovs[i];
> > niov->type = NET_IOV_DMABUF;
> > niov->owner = &owner->area;
> > + niov->desc.pp = NULL;
> > page_pool_set_dma_addr_netmem(net_iov_to_netmem(niov),
> > net_devmem_get_dma_addr(niov));
> > if (direction == DMA_TO_DEVICE)
> > diff --git a/net/core/netmem_priv.h b/net/core/netmem_priv.h
> > index 23175cb2bd86..fb21cc19176b 100644
> > --- a/net/core/netmem_priv.h
> > +++ b/net/core/netmem_priv.h
> > @@ -22,6 +22,12 @@ static inline void netmem_clear_pp_magic(netmem_ref netmem)
> >
> > static inline bool netmem_is_pp(netmem_ref netmem)
> > {
> > + /* Use ->pp for net_iov to identify if it's pp, which requires
> > + * that non-pp net_iov should have ->pp NULL'd.
> > + */
> > + if (netmem_is_net_iov(netmem))
> > + return !!netmem_to_nmdesc(netmem)->pp;
> > +
> > return (netmem_get_pp_magic(netmem) & PP_MAGIC_MASK) == PP_SIGNATURE;
> > }
> >
> > diff --git a/net/core/page_pool.c b/net/core/page_pool.c
> > index 1a5edec485f1..2756b78754b0 100644
> > --- a/net/core/page_pool.c
> > +++ b/net/core/page_pool.c
> > @@ -699,7 +699,13 @@ s32 page_pool_inflight(const struct page_pool *pool, bool strict)
> > void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
> > {
> > netmem_set_pp(netmem, pool);
> > - netmem_or_pp_magic(netmem, PP_SIGNATURE);
> > +
> > + /* For page-backed, pp_magic is used to identify if it's pp.
> > + * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
> > + * and nmdesc->pp is NULL if it's not.
> > + */
> > + if (!netmem_is_net_iov(netmem))
> > + netmem_or_pp_magic(netmem, PP_SIGNATURE);
> >
> > /* Ensuring all pages have been split into one fragment initially:
> > * page_pool_set_pp_info() is only called once for every page when it
> > @@ -714,7 +720,13 @@ void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem)
> >
> > void page_pool_clear_pp_info(netmem_ref netmem)
> > {
> > - netmem_clear_pp_magic(netmem);
> > + /* For page-backed, pp_magic is used to identify if it's pp.
> > + * For net_iov, it's ensured nmdesc->pp is non-NULL if it's pp
> > + * and nmdesc->pp is NULL if it's not.
> > + */
> > + if (!netmem_is_net_iov(netmem))
> > + netmem_clear_pp_magic(netmem);
> > +
> > netmem_set_pp(netmem, NULL);
> > }
> >
> >
> > base-commit: e1f5bb196f0b0eee197e06d361f8ac5f091c2963
> > --
> > 2.17.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-16 7:21 ` Byungchul Park
@ 2025-10-17 12:33 ` Pavel Begunkov
2025-10-17 15:13 ` Mina Almasry
2025-10-23 8:27 ` Byungchul Park
0 siblings, 2 replies; 9+ messages in thread
From: Pavel Begunkov @ 2025-10-17 12:33 UTC (permalink / raw)
To: Byungchul Park, axboe, kuba, pabeni, almasrymina
Cc: davem, edumazet, horms, hawk, ilias.apalodimas, sdf, dw, ap420073,
dtatulea, toke, io-uring, linux-kernel, netdev, kernel_team,
max.byungchul.park
On 10/16/25 08:21, Byungchul Park wrote:
> On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
>> ->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 don't think it simplify merging anyhow, hmm?
...>> diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
>> 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
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-17 12:33 ` Pavel Begunkov
@ 2025-10-17 15:13 ` Mina Almasry
2025-10-18 4:46 ` Byungchul Park
2025-10-23 8:27 ` Byungchul Park
1 sibling, 1 reply; 9+ messages in thread
From: Mina Almasry @ 2025-10-17 15:13 UTC (permalink / raw)
To: Pavel Begunkov
Cc: Byungchul Park, axboe, kuba, pabeni, davem, edumazet, horms, hawk,
ilias.apalodimas, sdf, dw, ap420073, dtatulea, toke, io-uring,
linux-kernel, netdev, kernel_team, max.byungchul.park
On Fri, Oct 17, 2025 at 5:32 AM Pavel Begunkov <asml.silence@gmail.com> wrote:
>
> On 10/16/25 08:21, Byungchul Park wrote:
> > On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> >> ->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 don't think it simplify merging anyhow, hmm?
>
+1 honestly.
If you want to 'extract the networking bits' into its own patch, let
it be a patch series where this is a patch doing pre-work, and the
next patches in the series are adding the page_flag.
I don't want added netmem_is_net_iov checks unnecessarily tbh. These
checks are bad and only used when absolutely necessary, so let the
patch series that adds them also do something useful (i.e. add the
page flag), if possible. But I honestly think this patch was almost
good as-is:
https://lore.kernel.org/all/20250729110210.48313-1-byungchul@sk.com/
You just need to address Jakub's review comments and resubmit? Not
sure why we want to split, but if you want let it be a patch series
that does something useful.
--
Thanks,
Mina
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-17 15:13 ` Mina Almasry
@ 2025-10-18 4:46 ` Byungchul Park
2025-10-18 15:05 ` Mina Almasry
0 siblings, 1 reply; 9+ messages in thread
From: Byungchul Park @ 2025-10-18 4:46 UTC (permalink / raw)
To: Mina Almasry
Cc: Pavel Begunkov, axboe, kuba, pabeni, davem, edumazet, horms, hawk,
ilias.apalodimas, sdf, dw, ap420073, dtatulea, toke, io-uring,
linux-kernel, netdev, kernel_team, max.byungchul.park
On Fri, Oct 17, 2025 at 08:13:14AM -0700, Mina Almasry wrote:
> On Fri, Oct 17, 2025 at 5:32 AM Pavel Begunkov <asml.silence@gmail.com> wrote:
> >
> > On 10/16/25 08:21, Byungchul Park wrote:
> > > On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> > >> ->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 don't think it simplify merging anyhow, hmm?
> >
>
> +1 honestly.
>
> If you want to 'extract the networking bits' into its own patch, let
> it be a patch series where this is a patch doing pre-work, and the
> next patches in the series are adding the page_flag.
Okay. Then is it possible that one for mm tree and the other for
net-next in the same patch series? I've never tried patches that way.
> I don't want added netmem_is_net_iov checks unnecessarily tbh. These
> checks are bad and only used when absolutely necessary, so let the
> patch series that adds them also do something useful (i.e. add the
> page flag), if possible. But I honestly think this patch was almost
> good as-is:
Hm.. but the following patch includes both networking changes and mm
changes. Jakub thinks it should go to mm and I don't know how Andrew
thinks it should be. It's not clear even to me.
That's why I splitted it into two, and this is the networking part, and
I will post the mm part to mm folks later. Any suggestions?
Byungchul
> https://lore.kernel.org/all/20250729110210.48313-1-byungchul@sk.com/
>
> You just need to address Jakub's review comments and resubmit? Not
> sure why we want to split, but if you want let it be a patch series
> that does something useful.
>
> --
> Thanks,
> Mina
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-18 4:46 ` Byungchul Park
@ 2025-10-18 15:05 ` Mina Almasry
0 siblings, 0 replies; 9+ messages in thread
From: Mina Almasry @ 2025-10-18 15:05 UTC (permalink / raw)
To: Byungchul Park
Cc: Pavel Begunkov, axboe, kuba, pabeni, davem, edumazet, horms, hawk,
ilias.apalodimas, sdf, dw, ap420073, dtatulea, toke, io-uring,
linux-kernel, netdev, kernel_team, max.byungchul.park
On Fri, Oct 17, 2025 at 11:47 PM Byungchul Park <byungchul@sk.com> wrote:
>
> On Fri, Oct 17, 2025 at 08:13:14AM -0700, Mina Almasry wrote:
> > On Fri, Oct 17, 2025 at 5:32 AM Pavel Begunkov <asml.silence@gmail.com> wrote:
> > >
> > > On 10/16/25 08:21, Byungchul Park wrote:
> > > > On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> > > >> ->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 don't think it simplify merging anyhow, hmm?
> > >
> >
> > +1 honestly.
> >
> > If you want to 'extract the networking bits' into its own patch, let
> > it be a patch series where this is a patch doing pre-work, and the
> > next patches in the series are adding the page_flag.
>
> Okay. Then is it possible that one for mm tree and the other for
> net-next in the same patch series? I've never tried patches that way.
>
> > I don't want added netmem_is_net_iov checks unnecessarily tbh. These
> > checks are bad and only used when absolutely necessary, so let the
> > patch series that adds them also do something useful (i.e. add the
> > page flag), if possible. But I honestly think this patch was almost
> > good as-is:
>
> Hm.. but the following patch includes both networking changes and mm
> changes. Jakub thinks it should go to mm and I don't know how Andrew
> thinks it should be. It's not clear even to me.
>
> That's why I splitted it into two, and this is the networking part, and
> I will post the mm part to mm folks later. Any suggestions?
>
I think 1 series with all the mm and networking changes targeting mm
and Cc: netdev@ would work (and lets see if Andrew prefers something
different). The networking changes are very small.
--
Thanks,
Mina
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov
2025-10-17 12:33 ` Pavel Begunkov
2025-10-17 15:13 ` Mina Almasry
@ 2025-10-23 8:27 ` Byungchul Park
1 sibling, 0 replies; 9+ messages in thread
From: Byungchul Park @ 2025-10-23 8:27 UTC (permalink / raw)
To: Pavel Begunkov
Cc: axboe, kuba, pabeni, almasrymina, davem, edumazet, horms, hawk,
ilias.apalodimas, sdf, dw, ap420073, dtatulea, toke, io-uring,
linux-kernel, netdev, kernel_team, max.byungchul.park
On Fri, Oct 17, 2025 at 01:33:43PM +0100, Pavel Begunkov wrote:
> On 10/16/25 08:21, Byungchul Park wrote:
> > On Thu, Oct 16, 2025 at 03:36:57PM +0900, Byungchul Park wrote:
> > > ->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
> > > 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
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-10-23 8:27 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-16 6:36 [PATCH net-next] page_pool: check if nmdesc->pp is !NULL to confirm its usage as pp for net_iov Byungchul Park
2025-10-16 7:21 ` Byungchul Park
2025-10-17 12:33 ` Pavel Begunkov
2025-10-17 15:13 ` Mina Almasry
2025-10-18 4:46 ` Byungchul Park
2025-10-18 15:05 ` Mina Almasry
2025-10-23 8:27 ` Byungchul Park
2025-10-16 23:31 ` Byungchul Park
2025-10-17 6:26 ` Byungchul Park
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox