linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/7] mm: minor clean up and improvement
@ 2024-03-25 15:04 Baoquan He
  2024-03-25 15:04 ` [PATCH 1/7] mm/mm_init.c: remove the useless dma_reserve Baoquan He
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

These mostly are for mm init when going through code flow.

Baoquan He (7):
  mm/mm_init.c: remove the useless dma_reserve
  mm/mm_init.c: add new function calc_nr_all_pages()
  mm/mm_init.c: remove meaningless calculation of zone->managed_pages in
    free_area_init_core()
  mm/mm_init.c: remove unneeded calc_memmap_size()
  mm/mm_init.c: remove arch_reserved_kernel_pages()
  mm: move array mem_section init code out of memory_present()
  mm/init: remove the unnecessary special treatment for memory-less node

 arch/powerpc/include/asm/mmu.h |   4 -
 arch/powerpc/kernel/fadump.c   |   5 --
 include/linux/mm.h             |   4 -
 mm/mm_init.c                   | 143 ++++++++-------------------------
 mm/sparse.c                    |  26 +++---
 5 files changed, 45 insertions(+), 137 deletions(-)

-- 
2.41.0



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/7] mm/mm_init.c: remove the useless dma_reserve
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:04 ` [PATCH 2/7] mm/mm_init.c: add new function calc_nr_all_pages() Baoquan He
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

Now nobody calls set_dma_reserve() to set value for dma_reserve, remove
global dma_reserve and the codes using it.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 include/linux/mm.h |  1 -
 mm/mm_init.c       | 23 -----------------------
 2 files changed, 24 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index 0436b919f1c7..ad19350e1538 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -3210,7 +3210,6 @@ static inline int early_pfn_to_nid(unsigned long pfn)
 extern int __meminit early_pfn_to_nid(unsigned long pfn);
 #endif
 
-extern void set_dma_reserve(unsigned long new_dma_reserve);
 extern void mem_init(void);
 extern void __init mmap_init(void);
 
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 549e76af8f82..153fb2dc666f 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -226,7 +226,6 @@ static unsigned long required_movablecore_percent __initdata;
 
 static unsigned long nr_kernel_pages __initdata;
 static unsigned long nr_all_pages __initdata;
-static unsigned long dma_reserve __initdata;
 
 static bool deferred_struct_pages __meminitdata;
 
@@ -1583,12 +1582,6 @@ static void __init free_area_init_core(struct pglist_data *pgdat)
 					zone_names[j], memmap_pages, freesize);
 		}
 
-		/* Account for reserved pages */
-		if (j == 0 && freesize > dma_reserve) {
-			freesize -= dma_reserve;
-			pr_debug("  %s zone: %lu pages reserved\n", zone_names[0], dma_reserve);
-		}
-
 		if (!is_highmem_idx(j))
 			nr_kernel_pages += freesize;
 		/* Charge for highmem memmap if there are enough kernel pages */
@@ -2547,22 +2540,6 @@ void *__init alloc_large_system_hash(const char *tablename,
 	return table;
 }
 
-/**
- * set_dma_reserve - set the specified number of pages reserved in the first zone
- * @new_dma_reserve: The number of pages to mark reserved
- *
- * The per-cpu batchsize and zone watermarks are determined by managed_pages.
- * In the DMA zone, a significant percentage may be consumed by kernel image
- * and other unfreeable allocations which can skew the watermarks badly. This
- * function may optionally be used to account for unfreeable pages in the
- * first zone (e.g., ZONE_DMA). The effect will be lower watermarks and
- * smaller per-cpu batchsize.
- */
-void __init set_dma_reserve(unsigned long new_dma_reserve)
-{
-	dma_reserve = new_dma_reserve;
-}
-
 void __init memblock_free_pages(struct page *page, unsigned long pfn,
 							unsigned int order)
 {
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/7] mm/mm_init.c: add new function calc_nr_all_pages()
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
  2024-03-25 15:04 ` [PATCH 1/7] mm/mm_init.c: remove the useless dma_reserve Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:04 ` [PATCH 3/7] mm/mm_init.c: remove meaningless calculation of zone->managed_pages in free_area_init_core() Baoquan He
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

This is a preparation to calculate nr_kernel_pages and nr_all_pages,
both of which will be used later in alloc_large_system_hash().

nr_all_pages counts up all free but not reserved memory in memblock
allocator, including HIGHMEM memory. While nr_kernel_pages counts up
all free but not reserved low memory in memblock allocator, excluding
HIGHMEM memory.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 mm/mm_init.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index 153fb2dc666f..c57a7fc97a16 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1264,6 +1264,30 @@ static void __init reset_memoryless_node_totalpages(struct pglist_data *pgdat)
 	pr_debug("On node %d totalpages: 0\n", pgdat->node_id);
 }
 
+static void __init calc_nr_kernel_pages(void)
+{
+	unsigned long start_pfn, end_pfn;
+	phys_addr_t start_addr, end_addr;
+	u64 u;
+#ifdef CONFIG_HIGHMEM
+	unsigned long high_zone_low = arch_zone_lowest_possible_pfn[ZONE_HIGHMEM];
+#endif
+
+	for_each_free_mem_range(u, NUMA_NO_NODE, MEMBLOCK_NONE, &start_addr, &end_addr, NULL) {
+		start_pfn = PFN_UP(start_addr);
+		end_pfn   = PFN_DOWN(end_addr);
+
+		if (start_pfn < end_pfn) {
+			nr_all_pages += end_pfn - start_pfn;
+#ifdef CONFIG_HIGHMEM
+			start_pfn = clamp(start_pfn, 0, high_zone_low);
+			end_pfn = clamp(end_pfn, 0, high_zone_low);
+#endif
+			nr_kernel_pages += end_pfn - start_pfn;
+		}
+	}
+}
+
 static void __init calculate_node_totalpages(struct pglist_data *pgdat,
 						unsigned long node_start_pfn,
 						unsigned long node_end_pfn)
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/7] mm/mm_init.c: remove meaningless calculation of zone->managed_pages in free_area_init_core()
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
  2024-03-25 15:04 ` [PATCH 1/7] mm/mm_init.c: remove the useless dma_reserve Baoquan He
  2024-03-25 15:04 ` [PATCH 2/7] mm/mm_init.c: add new function calc_nr_all_pages() Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:04 ` [PATCH 4/7] mm/mm_init.c: remove unneeded calc_memmap_size() Baoquan He
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

Currently, in free_area_init_core(), when initialize zone's field, a
rough value is set to zone->managed_pages. That value is calculated by
(zone->present_pages - memmap_pages).

In the meantime, add the value to nr_all_pages and nr_kernel_pages which
represent all free pages of system (only low memory or including HIGHMEM
memory separately). Both of them are gonna be used in
alloc_large_system_hash().

However, the rough calculation and setting of zone->managed_pages is
meaningless because
  a) memmap pages are allocated on units of node in sparse_init() or
     alloc_node_mem_map(pgdat); The simple (zone->present_pages -
     memmap_pages) is too rough to make sense for zone;
  b) the set zone->managed_pages will be zeroed out and reset with
     acutal value in mem_init() via memblock_free_all(). Before the
     resetting, no buddy allocation request is issued.

Here, remove the meaningless and complicated calculation of
(zone->present_pages - memmap_pages), initialize zone->managed_pages as 0
which reflect its actual value because no any page is added into buddy
system right now. It will be reset in mem_init().

And also remove the assignment of nr_all_pages and nr_kernel_pages in
free_area_init_core(). Instead, call the newly added calc_nr_kernel_pages()
to count up all free but not reserved memory in memblock and assign to
nr_all_pages and nr_kernel_pages. The counting excludes memmap_pages,
and other kernel used data, which is more accurate than old way and
simpler, and can also cover the ppc required arch_reserved_kernel_pages()
case.

And also clean up the outdated code comment above free_area_init_core().
And free_area_init_core() is easy to understand now, no need to add
words to explain.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 mm/mm_init.c | 46 +++++-----------------------------------------
 1 file changed, 5 insertions(+), 41 deletions(-)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index c57a7fc97a16..7f71e56e83f3 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1565,15 +1565,6 @@ void __ref free_area_init_core_hotplug(struct pglist_data *pgdat)
 }
 #endif
 
-/*
- * Set up the zone data structures:
- *   - mark all pages reserved
- *   - mark all memory queues empty
- *   - clear the memory bitmaps
- *
- * NOTE: pgdat should get zeroed by caller.
- * NOTE: this function is only called during early init.
- */
 static void __init free_area_init_core(struct pglist_data *pgdat)
 {
 	enum zone_type j;
@@ -1584,41 +1575,13 @@ static void __init free_area_init_core(struct pglist_data *pgdat)
 
 	for (j = 0; j < MAX_NR_ZONES; j++) {
 		struct zone *zone = pgdat->node_zones + j;
-		unsigned long size, freesize, memmap_pages;
-
-		size = zone->spanned_pages;
-		freesize = zone->present_pages;
-
-		/*
-		 * Adjust freesize so that it accounts for how much memory
-		 * is used by this zone for memmap. This affects the watermark
-		 * and per-cpu initialisations
-		 */
-		memmap_pages = calc_memmap_size(size, freesize);
-		if (!is_highmem_idx(j)) {
-			if (freesize >= memmap_pages) {
-				freesize -= memmap_pages;
-				if (memmap_pages)
-					pr_debug("  %s zone: %lu pages used for memmap\n",
-						 zone_names[j], memmap_pages);
-			} else
-				pr_warn("  %s zone: %lu memmap pages exceeds freesize %lu\n",
-					zone_names[j], memmap_pages, freesize);
-		}
-
-		if (!is_highmem_idx(j))
-			nr_kernel_pages += freesize;
-		/* Charge for highmem memmap if there are enough kernel pages */
-		else if (nr_kernel_pages > memmap_pages * 2)
-			nr_kernel_pages -= memmap_pages;
-		nr_all_pages += freesize;
+		unsigned long size = zone->spanned_pages;
 
 		/*
-		 * Set an approximate value for lowmem here, it will be adjusted
-		 * when the bootmem allocator frees pages into the buddy system.
-		 * And all highmem pages will be managed by the buddy system.
+		 * Initialize zone->managed_pages as 0 , it will be reset
+		 * when memblock allocator frees pages into buddy system.
 		 */
-		zone_init_internals(zone, j, nid, freesize);
+		zone_init_internals(zone, j, nid, 0);
 
 		if (!size)
 			continue;
@@ -1915,6 +1878,7 @@ void __init free_area_init(unsigned long *max_zone_pfn)
 		check_for_memory(pgdat);
 	}
 
+	calc_nr_kernel_pages();
 	memmap_init();
 
 	/* disable hash distribution for systems with a single node */
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/7] mm/mm_init.c: remove unneeded calc_memmap_size()
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
                   ` (2 preceding siblings ...)
  2024-03-25 15:04 ` [PATCH 3/7] mm/mm_init.c: remove meaningless calculation of zone->managed_pages in free_area_init_core() Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:04 ` [PATCH 5/7] mm/mm_init.c: remove arch_reserved_kernel_pages() Baoquan He
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

Nobody calls calc_memmap_size() now.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 mm/mm_init.c | 20 --------------------
 1 file changed, 20 deletions(-)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index 7f71e56e83f3..e269a724f70e 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1331,26 +1331,6 @@ static void __init calculate_node_totalpages(struct pglist_data *pgdat,
 	pr_debug("On node %d totalpages: %lu\n", pgdat->node_id, realtotalpages);
 }
 
-static unsigned long __init calc_memmap_size(unsigned long spanned_pages,
-						unsigned long present_pages)
-{
-	unsigned long pages = spanned_pages;
-
-	/*
-	 * Provide a more accurate estimation if there are holes within
-	 * the zone and SPARSEMEM is in use. If there are holes within the
-	 * zone, each populated memory region may cost us one or two extra
-	 * memmap pages due to alignment because memmap pages for each
-	 * populated regions may not be naturally aligned on page boundary.
-	 * So the (present_pages >> 4) heuristic is a tradeoff for that.
-	 */
-	if (spanned_pages > present_pages + (present_pages >> 4) &&
-	    IS_ENABLED(CONFIG_SPARSEMEM))
-		pages = present_pages;
-
-	return PAGE_ALIGN(pages * sizeof(struct page)) >> PAGE_SHIFT;
-}
-
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 static void pgdat_init_split_queue(struct pglist_data *pgdat)
 {
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/7] mm/mm_init.c: remove arch_reserved_kernel_pages()
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
                   ` (3 preceding siblings ...)
  2024-03-25 15:04 ` [PATCH 4/7] mm/mm_init.c: remove unneeded calc_memmap_size() Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:04 ` [PATCH 6/7] mm: move array mem_section init code out of memory_present() Baoquan He
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

Since the current calculation of calc_nr_kernel_pages() has taken into
consideration of kernel reserved memory, no need to have
arch_reserved_kernel_pages() any more.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/powerpc/include/asm/mmu.h |  4 ----
 arch/powerpc/kernel/fadump.c   |  5 -----
 include/linux/mm.h             |  3 ---
 mm/mm_init.c                   | 12 ------------
 4 files changed, 24 deletions(-)

diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h
index 3b72c7ed24cf..aa5c0fd5edb1 100644
--- a/arch/powerpc/include/asm/mmu.h
+++ b/arch/powerpc/include/asm/mmu.h
@@ -406,9 +406,5 @@ extern void *abatron_pteptrs[2];
 #include <asm/nohash/mmu.h>
 #endif
 
-#if defined(CONFIG_FA_DUMP) || defined(CONFIG_PRESERVE_FA_DUMP)
-#define __HAVE_ARCH_RESERVED_KERNEL_PAGES
-#endif
-
 #endif /* __KERNEL__ */
 #endif /* _ASM_POWERPC_MMU_H_ */
diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
index d14eda1e8589..ae8c7619e597 100644
--- a/arch/powerpc/kernel/fadump.c
+++ b/arch/powerpc/kernel/fadump.c
@@ -1735,8 +1735,3 @@ static void __init fadump_reserve_crash_area(u64 base)
 		memblock_reserve(mstart, msize);
 	}
 }
-
-unsigned long __init arch_reserved_kernel_pages(void)
-{
-	return memblock_reserved_size() / PAGE_SIZE;
-}
diff --git a/include/linux/mm.h b/include/linux/mm.h
index ad19350e1538..ab1ba0a31429 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -3221,9 +3221,6 @@ static inline void show_mem(void)
 extern long si_mem_available(void);
 extern void si_meminfo(struct sysinfo * val);
 extern void si_meminfo_node(struct sysinfo *val, int nid);
-#ifdef __HAVE_ARCH_RESERVED_KERNEL_PAGES
-extern unsigned long arch_reserved_kernel_pages(void);
-#endif
 
 extern __printf(3, 4)
 void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...);
diff --git a/mm/mm_init.c b/mm/mm_init.c
index e269a724f70e..089dc60159e9 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -2373,17 +2373,6 @@ void __init page_alloc_init_late(void)
 	page_alloc_sysctl_init();
 }
 
-#ifndef __HAVE_ARCH_RESERVED_KERNEL_PAGES
-/*
- * Returns the number of pages that arch has reserved but
- * is not known to alloc_large_system_hash().
- */
-static unsigned long __init arch_reserved_kernel_pages(void)
-{
-	return 0;
-}
-#endif
-
 /*
  * Adaptive scale is meant to reduce sizes of hash tables on large memory
  * machines. As memory size is increased the scale is also increased but at
@@ -2426,7 +2415,6 @@ void *__init alloc_large_system_hash(const char *tablename,
 	if (!numentries) {
 		/* round applicable memory size up to nearest megabyte */
 		numentries = nr_kernel_pages;
-		numentries -= arch_reserved_kernel_pages();
 
 		/* It isn't necessary when PAGE_SIZE >= 1MB */
 		if (PAGE_SIZE < SZ_1M)
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 6/7] mm: move array mem_section init code out of memory_present()
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
                   ` (4 preceding siblings ...)
  2024-03-25 15:04 ` [PATCH 5/7] mm/mm_init.c: remove arch_reserved_kernel_pages() Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:04 ` [PATCH 7/7] mm/init: remove the unnecessary special treatment for memory-less node Baoquan He
  2024-03-25 15:08 ` [PATCH 0/7] mm: minor clean up and improvement Baoquan He
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

When CONFIG_SPARSEMEM_EXTREME is enabled, mem_section need be initialized
to point at a two-dimensional array, and its 1st dimension of length
NR_SECTION_ROOTS will be dynamically allocated. Once the allocation is
done, it's available for all nodes.

So take the 1st dimension of mem_section initialization out of
memory_present()(), and put it into memblocks_present() which is a more
appripriate place.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 mm/sparse.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/mm/sparse.c b/mm/sparse.c
index aed0951b87fa..46e88549d1a6 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -226,19 +226,6 @@ static void __init memory_present(int nid, unsigned long start, unsigned long en
 {
 	unsigned long pfn;
 
-#ifdef CONFIG_SPARSEMEM_EXTREME
-	if (unlikely(!mem_section)) {
-		unsigned long size, align;
-
-		size = sizeof(struct mem_section *) * NR_SECTION_ROOTS;
-		align = 1 << (INTERNODE_CACHE_SHIFT);
-		mem_section = memblock_alloc(size, align);
-		if (!mem_section)
-			panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
-			      __func__, size, align);
-	}
-#endif
-
 	start &= PAGE_SECTION_MASK;
 	mminit_validate_memmodel_limits(&start, &end);
 	for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
@@ -267,6 +254,19 @@ static void __init memblocks_present(void)
 	unsigned long start, end;
 	int i, nid;
 
+#ifdef CONFIG_SPARSEMEM_EXTREME
+	if (unlikely(!mem_section)) {
+		unsigned long size, align;
+
+		size = sizeof(struct mem_section *) * NR_SECTION_ROOTS;
+		align = 1 << (INTERNODE_CACHE_SHIFT);
+		mem_section = memblock_alloc(size, align);
+		if (!mem_section)
+			panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
+			      __func__, size, align);
+	}
+#endif
+
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, &nid)
 		memory_present(nid, start, end);
 }
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 7/7] mm/init: remove the unnecessary special treatment for memory-less node
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
                   ` (5 preceding siblings ...)
  2024-03-25 15:04 ` [PATCH 6/7] mm: move array mem_section init code out of memory_present() Baoquan He
@ 2024-03-25 15:04 ` Baoquan He
  2024-03-25 15:08 ` [PATCH 0/7] mm: minor clean up and improvement Baoquan He
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:04 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman, Baoquan He

Because memory-less node's ->node_present_pages and its
zone's ->present_pages are all 0, the judgement before calling
node_set_state() to set N_MEMORY, N_HIGH_MEMORY, N_NORMAL_MEMORY for
node is enough to skip memory-less node. The 'continue;' statement
inside for_each_node() loop of free_area_init() is gilding the lily.

Here, remove the special handling to make memory-less node share the
same code flow as normal node. And the code comment above the 'continue'
statement is not needed either.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 mm/mm_init.c | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index 089dc60159e9..99681ffb9091 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1834,28 +1834,16 @@ void __init free_area_init(unsigned long *max_zone_pfn)
 				panic("Cannot allocate %zuB for node %d.\n",
 				       sizeof(*pgdat), nid);
 			arch_refresh_nodedata(nid, pgdat);
-			free_area_init_node(nid);
-
-			/*
-			 * We do not want to confuse userspace by sysfs
-			 * files/directories for node without any memory
-			 * attached to it, so this node is not marked as
-			 * N_MEMORY and not marked online so that no sysfs
-			 * hierarchy will be created via register_one_node for
-			 * it. The pgdat will get fully initialized by
-			 * hotadd_init_pgdat() when memory is hotplugged into
-			 * this node.
-			 */
-			continue;
 		}
 
 		pgdat = NODE_DATA(nid);
 		free_area_init_node(nid);
 
 		/* Any memory on that node */
-		if (pgdat->node_present_pages)
+		if (pgdat->node_present_pages) {
 			node_set_state(nid, N_MEMORY);
-		check_for_memory(pgdat);
+			check_for_memory(pgdat);
+		}
 	}
 
 	calc_nr_kernel_pages();
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/7] mm: minor clean up and improvement
  2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
                   ` (6 preceding siblings ...)
  2024-03-25 15:04 ` [PATCH 7/7] mm/init: remove the unnecessary special treatment for memory-less node Baoquan He
@ 2024-03-25 15:08 ` Baoquan He
  7 siblings, 0 replies; 9+ messages in thread
From: Baoquan He @ 2024-03-25 15:08 UTC (permalink / raw)
  To: linux-mm; +Cc: akpm, rppt, mgorman

On 03/25/24 at 11:04pm, Baoquan He wrote:

Sorry for the noise, I did misoperation on my local git commits,
please ignore this series.

> These mostly are for mm init when going through code flow.
> 
> Baoquan He (7):
>   mm/mm_init.c: remove the useless dma_reserve
>   mm/mm_init.c: add new function calc_nr_all_pages()
>   mm/mm_init.c: remove meaningless calculation of zone->managed_pages in
>     free_area_init_core()
>   mm/mm_init.c: remove unneeded calc_memmap_size()
>   mm/mm_init.c: remove arch_reserved_kernel_pages()
>   mm: move array mem_section init code out of memory_present()
>   mm/init: remove the unnecessary special treatment for memory-less node
> 
>  arch/powerpc/include/asm/mmu.h |   4 -
>  arch/powerpc/kernel/fadump.c   |   5 --
>  include/linux/mm.h             |   4 -
>  mm/mm_init.c                   | 143 ++++++++-------------------------
>  mm/sparse.c                    |  26 +++---
>  5 files changed, 45 insertions(+), 137 deletions(-)
> 
> -- 
> 2.41.0
> 



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-03-25 15:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-25 15:04 [PATCH 0/7] mm: minor clean up and improvement Baoquan He
2024-03-25 15:04 ` [PATCH 1/7] mm/mm_init.c: remove the useless dma_reserve Baoquan He
2024-03-25 15:04 ` [PATCH 2/7] mm/mm_init.c: add new function calc_nr_all_pages() Baoquan He
2024-03-25 15:04 ` [PATCH 3/7] mm/mm_init.c: remove meaningless calculation of zone->managed_pages in free_area_init_core() Baoquan He
2024-03-25 15:04 ` [PATCH 4/7] mm/mm_init.c: remove unneeded calc_memmap_size() Baoquan He
2024-03-25 15:04 ` [PATCH 5/7] mm/mm_init.c: remove arch_reserved_kernel_pages() Baoquan He
2024-03-25 15:04 ` [PATCH 6/7] mm: move array mem_section init code out of memory_present() Baoquan He
2024-03-25 15:04 ` [PATCH 7/7] mm/init: remove the unnecessary special treatment for memory-less node Baoquan He
2024-03-25 15:08 ` [PATCH 0/7] mm: minor clean up and improvement Baoquan He

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).