The existing vmemmap optimization macros are named in terms of tail
pages, but they actually describe which folio sizes can use the
optimization and how much vmemmap backing an optimized folio keeps.

Rename them to reflect that meaning directly. This makes the names work
for both HugeTLB and other folio-based users such as DAX.

Signed-off-by: Muchun Song <[email protected]>
---
 include/linux/mmzone.h | 18 ++++++++++--------
 mm/hugetlb.c           |  4 ++--
 mm/hugetlb_vmemmap.c   |  2 +-
 mm/sparse-vmemmap.c    |  4 ++--
 4 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 362e16497533..40b1cea98b82 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -107,13 +107,15 @@
         is_power_of_2(sizeof(struct page)) ? \
         MAX_FOLIO_NR_PAGES * sizeof(struct page) : 0)
 
-/*
- * vmemmap optimization (like HVO) is only possible for page orders that fill
- * two or more pages with struct pages.
- */
-#define VMEMMAP_TAIL_MIN_ORDER (ilog2(2 * PAGE_SIZE / sizeof(struct page)))
-#define __NR_VMEMMAP_TAILS (MAX_FOLIO_ORDER - VMEMMAP_TAIL_MIN_ORDER + 1)
-#define NR_VMEMMAP_TAILS (__NR_VMEMMAP_TAILS > 0 ? __NR_VMEMMAP_TAILS : 0)
+/* The number of vmemmap pages required by a vmemmap-optimized folio. */
+#define OPTIMIZED_FOLIO_VMEMMAP_PAGES          1
+#define OPTIMIZED_FOLIO_VMEMMAP_SIZE           (OPTIMIZED_FOLIO_VMEMMAP_PAGES 
* PAGE_SIZE)
+#define OPTIMIZED_FOLIO_VMEMMAP_NR_STRUCT_PAGES        
(OPTIMIZED_FOLIO_VMEMMAP_SIZE / sizeof(struct page))
+#define OPTIMIZABLE_FOLIO_MIN_ORDER            
(ilog2(OPTIMIZED_FOLIO_VMEMMAP_NR_STRUCT_PAGES) + 1)
+
+#define __NR_OPTIMIZABLE_FOLIO_ORDERS          (MAX_FOLIO_ORDER - 
OPTIMIZABLE_FOLIO_MIN_ORDER + 1)
+#define NR_OPTIMIZABLE_FOLIO_ORDERS            \
+       (__NR_OPTIMIZABLE_FOLIO_ORDERS > 0 ? __NR_OPTIMIZABLE_FOLIO_ORDERS : 0)
 
 enum migratetype {
        MIGRATE_UNMOVABLE,
@@ -1146,7 +1148,7 @@ struct zone {
        atomic_long_t           vm_stat[NR_VM_ZONE_STAT_ITEMS];
        atomic_long_t           vm_numa_event[NR_VM_NUMA_EVENT_ITEMS];
 #ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP
-       struct page *vmemmap_tails[NR_VMEMMAP_TAILS];
+       struct page *vmemmap_tails[NR_OPTIMIZABLE_FOLIO_ORDERS];
 #endif
 } ____cacheline_internodealigned_in_smp;
 
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 1f0a0e31d624..53448b05ca11 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -3318,7 +3318,7 @@ void __init hugetlb_struct_page_init(void)
        struct zone *zone;
 
        for_each_zone(zone) {
-               for (int i = 0; i < NR_VMEMMAP_TAILS; i++) {
+               for (int i = 0; i < NR_OPTIMIZABLE_FOLIO_ORDERS; i++) {
                        struct page *tail, *p;
                        unsigned int order;
 
@@ -3326,7 +3326,7 @@ void __init hugetlb_struct_page_init(void)
                        if (!tail)
                                continue;
 
-                       order = i + VMEMMAP_TAIL_MIN_ORDER;
+                       order = i + OPTIMIZABLE_FOLIO_MIN_ORDER;
                        p = page_to_virt(tail);
                        for (int j = 0; j < PAGE_SIZE / sizeof(struct page); 
j++)
                                init_compound_tail(p + j, NULL, order, zone);
diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
index 952216a49bcb..e9906d32a64c 100644
--- a/mm/hugetlb_vmemmap.c
+++ b/mm/hugetlb_vmemmap.c
@@ -495,7 +495,7 @@ static bool vmemmap_should_optimize_folio(const struct 
hstate *h, struct folio *
 
 static struct page *vmemmap_get_tail(unsigned int order, struct zone *zone)
 {
-       const unsigned int idx = order - VMEMMAP_TAIL_MIN_ORDER;
+       const unsigned int idx = order - OPTIMIZABLE_FOLIO_MIN_ORDER;
        struct page *tail, *p;
        int node = zone_to_nid(zone);
 
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index d7e9fb47f7ee..39529245d790 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -318,12 +318,12 @@ static __meminit struct page *vmemmap_get_tail(unsigned 
int order, struct zone *
        unsigned int idx;
        int node = zone_to_nid(zone);
 
-       if (WARN_ON_ONCE(order < VMEMMAP_TAIL_MIN_ORDER))
+       if (WARN_ON_ONCE(order < OPTIMIZABLE_FOLIO_MIN_ORDER))
                return NULL;
        if (WARN_ON_ONCE(order > MAX_FOLIO_ORDER))
                return NULL;
 
-       idx = order - VMEMMAP_TAIL_MIN_ORDER;
+       idx = order - OPTIMIZABLE_FOLIO_MIN_ORDER;
        tail = zone->vmemmap_tails[idx];
        if (tail)
                return tail;
-- 
2.54.0


Reply via email to