]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ptdesc: remove references to folios from __pagetable_ctor() and pagetable_dtor()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 8 Sep 2025 17:11:01 +0000 (18:11 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 12 Sep 2025 00:25:57 +0000 (17:25 -0700)
In preparation for splitting struct ptdesc from struct page and struct
folio, remove mentions of struct folio from these functions.  Introduce
ptdesc_nr_pages() to avoid using lruvec_stat_add/sub_folio()

Link: https://lkml.kernel.org/r/20250908171104.2409217-3-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/mm.h

index 8dd71392eba7ea6f69d3b7d9cc49b0cb23414e8f..25f56e209ec8fa65c2366857d9bb4d16e41ff4ad 100644 (file)
@@ -2097,9 +2097,9 @@ static inline long folio_nr_pages(const struct folio *folio)
  * page.  compound_nr() can be called on a tail page, and is defined to
  * return 1 in that case.
  */
-static inline long compound_nr(struct page *page)
+static inline long compound_nr(const struct page *page)
 {
-       struct folio *folio = (struct folio *)page;
+       const struct folio *folio = (struct folio *)page;
 
        if (!test_bit(PG_head, &folio->flags.f))
                return 1;
@@ -3066,21 +3066,26 @@ static inline bool ptlock_init(struct ptdesc *ptdesc) { return true; }
 static inline void ptlock_free(struct ptdesc *ptdesc) {}
 #endif /* defined(CONFIG_SPLIT_PTE_PTLOCKS) */
 
+static inline unsigned long ptdesc_nr_pages(const struct ptdesc *ptdesc)
+{
+       return compound_nr(ptdesc_page(ptdesc));
+}
+
 static inline void __pagetable_ctor(struct ptdesc *ptdesc)
 {
-       struct folio *folio = ptdesc_folio(ptdesc);
+       pg_data_t *pgdat = NODE_DATA(memdesc_nid(ptdesc->pt_flags));
 
-       __folio_set_pgtable(folio);
-       lruvec_stat_add_folio(folio, NR_PAGETABLE);
+       __SetPageTable(ptdesc_page(ptdesc));
+       mod_node_page_state(pgdat, NR_PAGETABLE, ptdesc_nr_pages(ptdesc));
 }
 
 static inline void pagetable_dtor(struct ptdesc *ptdesc)
 {
-       struct folio *folio = ptdesc_folio(ptdesc);
+       pg_data_t *pgdat = NODE_DATA(memdesc_nid(ptdesc->pt_flags));
 
        ptlock_free(ptdesc);
-       __folio_clear_pgtable(folio);
-       lruvec_stat_sub_folio(folio, NR_PAGETABLE);
+       __ClearPageTable(ptdesc_page(ptdesc));
+       mod_node_page_state(pgdat, NR_PAGETABLE, -ptdesc_nr_pages(ptdesc));
 }
 
 static inline void pagetable_dtor_free(struct ptdesc *ptdesc)