Thread (49 messages) 49 messages, 4 authors, 2025-07-28

Re: [PATCH net-next v9 0/8] Split netmem from struct page

From: Mina Almasry <hidden>
Date: 2025-07-10 18:35:47
Also in: bpf, linux-mm, linux-rdma, lkml

On Thu, Jul 10, 2025 at 1:28 AM Byungchul Park [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi all,

The MM subsystem is trying to reduce struct page to a single pointer.
See the following link for your information:

   https://kernelnewbies.org/MatthewWilcox/Memdescs/Path

The first step towards that is splitting struct page by its individual
users, as has already been done with folio and slab.  This patchset does
that for page pool.

Matthew Wilcox tried and stopped the same work, you can see in:

   https://lore.kernel.org/linux-mm/20230111042214.907030-1-willy@infradead.org/ (local)

I focused on removing the page pool members in struct page this time,
not moving the allocation code of page pool from net to mm.  It can be
done later if needed.

The final patch removing the page pool fields will be posted once all
the converting of page to netmem are done:

   1. converting use of the pp fields in struct page in prueth_swdata.
   2. converting use of the pp fields in struct page in freescale driver.

For our discussion, I'm sharing what the final patch looks like, in this
cover letter.

        Byungchul
--8<--
commit 1847d9890f798456b21ccb27aac7545303048492
Author: Byungchul Park [off-list ref]
Date:   Wed May 28 20:44:55 2025 +0900

    mm, netmem: remove the page pool members in struct page

    Now that all the users of the page pool members in struct page have been
    gone, the members can be removed from struct page.

    However, since struct netmem_desc still uses the space in struct page,
    the important offsets should be checked properly, until struct
    netmem_desc has its own instance from slab.

    Remove the page pool members in struct page and modify static checkers
    for the offsets.

    Signed-off-by: Byungchul Park [off-list ref]
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 32ba5126e221..db2fe0d0ebbf 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -120,17 +120,6 @@ struct page {
                         */
                        unsigned long private;
                };
-               struct {        /* page_pool used by netstack */
-                       /**
-                        * @pp_magic: magic value to avoid recycling non
-                        * page_pool allocated pages.
-                        */
-                       unsigned long pp_magic;
-                       struct page_pool *pp;
-                       unsigned long _pp_mapping_pad;
-                       unsigned long dma_addr;
-                       atomic_long_t pp_ref_count;
-               };
                struct {        /* Tail pages of compound page */
                        unsigned long compound_head;    /* Bit zero is set */
                };
diff --git a/include/net/netmem.h b/include/net/netmem.h
index 8f354ae7d5c3..3414f184d018 100644
--- a/include/net/netmem.h
+++ b/include/net/netmem.h
@@ -42,11 +42,8 @@ struct netmem_desc {
        static_assert(offsetof(struct page, pg) == \
                      offsetof(struct netmem_desc, desc))
 NETMEM_DESC_ASSERT_OFFSET(flags, _flags);
-NETMEM_DESC_ASSERT_OFFSET(pp_magic, pp_magic);
-NETMEM_DESC_ASSERT_OFFSET(pp, pp);
-NETMEM_DESC_ASSERT_OFFSET(_pp_mapping_pad, _pp_mapping_pad);
-NETMEM_DESC_ASSERT_OFFSET(dma_addr, dma_addr);
-NETMEM_DESC_ASSERT_OFFSET(pp_ref_count, pp_ref_count);
+NETMEM_DESC_ASSERT_OFFSET(lru, pp_magic);
+NETMEM_DESC_ASSERT_OFFSET(mapping, _pp_mapping_pad);
 #undef NETMEM_DESC_ASSERT_OFFSET

 /*

Can you remove the above patch/diff from the cover letter?

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