[PATCH net-next] net: netmem: remove NET_IOV_MAX from net_iov_type enum

Bobby Eshleman posted 1 patch 3 months, 2 weeks ago
include/net/netmem.h | 4 ----
1 file changed, 4 deletions(-)
[PATCH net-next] net: netmem: remove NET_IOV_MAX from net_iov_type enum
Posted by Bobby Eshleman 3 months, 2 weeks ago
From: Bobby Eshleman <bobbyeshleman@meta.com>

Remove the NET_IOV_MAX workaround from the net_iov_type enum. This entry
was previously added to force the enum size to unsigned long to satisfy
the NET_IOV_ASSERT_OFFSET static assertions.

After commit f3d85c9ee510 ("netmem: introduce struct netmem_desc
mirroring struct page") this approach became unnecessary by placing the
net_iov_type after the netmem_desc. Placing the net_iov_type after
netmem_desc results in the net_iov_type size having no effect on the
position or layout of the fields that mirror the struct page.

The layout before this patch:

struct net_iov {
	union {
		struct netmem_desc desc;                 /*     0    48 */
		struct {
			long unsigned int _flags;        /*     0     8 */
			long unsigned int pp_magic;      /*     8     8 */
			struct page_pool * pp;           /*    16     8 */
			long unsigned int _pp_mapping_pad; /*    24     8 */
			long unsigned int dma_addr;      /*    32     8 */
			atomic_long_t pp_ref_count;      /*    40     8 */
		};                                       /*     0    48 */
	};                                               /*     0    48 */
	struct net_iov_area *      owner;                /*    48     8 */
	enum net_iov_type          type;                 /*    56     8 */

	/* size: 64, cachelines: 1, members: 3 */
};

The layout after this patch:

struct net_iov {
	union {
		struct netmem_desc desc;                 /*     0    48 */
		struct {
			long unsigned int _flags;        /*     0     8 */
			long unsigned int pp_magic;      /*     8     8 */
			struct page_pool * pp;           /*    16     8 */
			long unsigned int _pp_mapping_pad; /*    24     8 */
			long unsigned int dma_addr;      /*    32     8 */
			atomic_long_t pp_ref_count;      /*    40     8 */
		};                                       /*     0    48 */
	};                                               /*     0    48 */
	struct net_iov_area *      owner;                /*    48     8 */
	enum net_iov_type          type;                 /*    56     4 */

	/* size: 64, cachelines: 1, members: 3 */
	/* padding: 4 */
};

Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com>
---
 include/net/netmem.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/include/net/netmem.h b/include/net/netmem.h
index 651e2c62d1dd..9e10f4ac50c3 100644
--- a/include/net/netmem.h
+++ b/include/net/netmem.h
@@ -68,10 +68,6 @@ DECLARE_STATIC_KEY_FALSE(page_pool_mem_providers);
 enum net_iov_type {
 	NET_IOV_DMABUF,
 	NET_IOV_IOURING,
-
-	/* Force size to unsigned long to make the NET_IOV_ASSERTS below pass.
-	 */
-	NET_IOV_MAX = ULONG_MAX
 };
 
 /* A memory descriptor representing abstract networking I/O vectors,

---
base-commit: f0a24b2547cfdd5ec85a131e386a2ce4ff9179cb
change-id: 20251024-b4-devmem-remove-niov-max-0d377187c9cb

Best regards,
-- 
Bobby Eshleman <bobbyeshleman@meta.com>
Re: [PATCH net-next] net: netmem: remove NET_IOV_MAX from net_iov_type enum
Posted by Mina Almasry 3 months, 1 week ago
On Fri, Oct 24, 2025 at 11:03 AM Bobby Eshleman <bobbyeshleman@gmail.com> wrote:
>
> From: Bobby Eshleman <bobbyeshleman@meta.com>
>
> Remove the NET_IOV_MAX workaround from the net_iov_type enum. This entry
> was previously added to force the enum size to unsigned long to satisfy
> the NET_IOV_ASSERT_OFFSET static assertions.
>
> After commit f3d85c9ee510 ("netmem: introduce struct netmem_desc
> mirroring struct page") this approach became unnecessary by placing the
> net_iov_type after the netmem_desc. Placing the net_iov_type after
> netmem_desc results in the net_iov_type size having no effect on the
> position or layout of the fields that mirror the struct page.
>
> The layout before this patch:
>
> struct net_iov {
>         union {
>                 struct netmem_desc desc;                 /*     0    48 */
>                 struct {
>                         long unsigned int _flags;        /*     0     8 */
>                         long unsigned int pp_magic;      /*     8     8 */
>                         struct page_pool * pp;           /*    16     8 */
>                         long unsigned int _pp_mapping_pad; /*    24     8 */
>                         long unsigned int dma_addr;      /*    32     8 */
>                         atomic_long_t pp_ref_count;      /*    40     8 */
>                 };                                       /*     0    48 */
>         };                                               /*     0    48 */
>         struct net_iov_area *      owner;                /*    48     8 */
>         enum net_iov_type          type;                 /*    56     8 */
>
>         /* size: 64, cachelines: 1, members: 3 */
> };
>
> The layout after this patch:
>
> struct net_iov {
>         union {
>                 struct netmem_desc desc;                 /*     0    48 */
>                 struct {
>                         long unsigned int _flags;        /*     0     8 */
>                         long unsigned int pp_magic;      /*     8     8 */
>                         struct page_pool * pp;           /*    16     8 */
>                         long unsigned int _pp_mapping_pad; /*    24     8 */
>                         long unsigned int dma_addr;      /*    32     8 */
>                         atomic_long_t pp_ref_count;      /*    40     8 */
>                 };                                       /*     0    48 */
>         };                                               /*     0    48 */
>         struct net_iov_area *      owner;                /*    48     8 */
>         enum net_iov_type          type;                 /*    56     4 */
>
>         /* size: 64, cachelines: 1, members: 3 */
>         /* padding: 4 */
> };
>
> Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com>

Reviewed-by: Mina Almasry <almasrymina@google.com>