linux-snps-arc.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/13] arch, mm: reduce code duplication in mem_init()
@ 2025-03-06 18:51 Mike Rapoport
  2025-03-06 18:51 ` [PATCH 01/13] arm: mem_init: use memblock_phys_free() to free DMA memory on SA1111 Mike Rapoport
                   ` (14 more replies)
  0 siblings, 15 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

Hi,

Every architecture has implementation of mem_init() function and some
even more than one. All these release free memory to the buddy
allocator, most of them set high_memory to the end of directly
addressable memory and many of them set max_mapnr for FLATMEM case.

These patches pull the commonalities into the generic code and refactor
some of the mem_init() implementations so that many of them can be just
dropped.

Mike Rapoport (Microsoft) (13):
  arm: mem_init: use memblock_phys_free() to free DMA memory on SA1111
  csky: move setup_initrd() to setup.c
  hexagon: move initialization of init_mm.context init to paging_init()
  MIPS: consolidate mem_init() for NUMA machines
  MIPS: make setup_zero_pages() use memblock
  nios2: move pr_debug() about memory start and end to setup_arch()
  s390: make setup_zero_pages() use memblock
  xtensa: split out printing of virtual memory layout to a function
  arch, mm: set max_mapnr when allocating memory map for FLATMEM
  arch, mm: set high_memory in free_area_init()
  arch, mm: streamline HIGHMEM freeing
  arch, mm: introduce arch_mm_preinit
  arch, mm: make releasing of memory to page allocator more explicit

 arch/alpha/mm/init.c               |  8 ----
 arch/arc/mm/init.c                 | 25 +----------
 arch/arm/mm/init.c                 | 43 +------------------
 arch/arm/mm/mmu.c                  |  2 -
 arch/arm/mm/nommu.c                |  1 -
 arch/arm64/mm/init.c               | 12 +-----
 arch/csky/kernel/setup.c           | 43 +++++++++++++++++++
 arch/csky/mm/init.c                | 67 ------------------------------
 arch/hexagon/mm/init.c             | 32 ++------------
 arch/loongarch/kernel/numa.c       |  6 ---
 arch/loongarch/mm/init.c           |  8 ----
 arch/m68k/mm/init.c                |  4 --
 arch/m68k/mm/mcfmmu.c              |  1 -
 arch/m68k/mm/motorola.c            |  2 -
 arch/m68k/sun3/config.c            |  1 -
 arch/microblaze/mm/init.c          | 25 -----------
 arch/mips/include/asm/mmzone.h     |  2 -
 arch/mips/loongson64/numa.c        |  7 ----
 arch/mips/mm/init.c                | 49 ++++------------------
 arch/mips/sgi-ip27/ip27-memory.c   |  9 ----
 arch/nios2/kernel/setup.c          |  3 +-
 arch/nios2/mm/init.c               | 16 +------
 arch/openrisc/mm/init.c            |  6 ---
 arch/parisc/mm/init.c              |  4 --
 arch/powerpc/kernel/setup-common.c |  3 --
 arch/powerpc/mm/mem.c              | 18 +-------
 arch/riscv/mm/init.c               |  5 +--
 arch/s390/mm/init.c                | 18 +-------
 arch/sh/mm/init.c                  | 10 -----
 arch/sparc/mm/init_32.c            | 31 +-------------
 arch/sparc/mm/init_64.c            |  4 --
 arch/um/include/shared/mem_user.h  |  1 -
 arch/um/kernel/mem.c               |  9 ++--
 arch/um/kernel/physmem.c           | 12 ------
 arch/um/kernel/um_arch.c           |  2 -
 arch/x86/include/asm/highmem.h     |  3 --
 arch/x86/include/asm/numa.h        |  4 --
 arch/x86/include/asm/numa_32.h     | 13 ------
 arch/x86/kernel/setup.c            |  2 -
 arch/x86/mm/Makefile               |  2 -
 arch/x86/mm/highmem_32.c           | 34 ---------------
 arch/x86/mm/init_32.c              | 41 ++----------------
 arch/x86/mm/init_64.c              |  7 ++--
 arch/x86/mm/numa_32.c              |  3 --
 arch/xtensa/mm/init.c              | 66 +++++++----------------------
 include/asm-generic/memory_model.h |  5 ++-
 include/linux/memblock.h           |  1 -
 include/linux/mm.h                 | 13 +-----
 mm/internal.h                      |  3 +-
 mm/memblock.c                      |  3 +-
 mm/memory.c                        | 16 -------
 mm/mm_init.c                       | 58 ++++++++++++++++++++++----
 mm/nommu.c                         |  6 ---
 53 files changed, 151 insertions(+), 618 deletions(-)
 delete mode 100644 arch/x86/include/asm/numa_32.h
 delete mode 100644 arch/x86/mm/highmem_32.c


base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 01/13] arm: mem_init: use memblock_phys_free() to free DMA memory on SA1111
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 02/13] csky: move setup_initrd() to setup.c Mike Rapoport
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

This will help to pull out memblock_free_all() to generic code.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/arm/mm/init.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 5345d218899a..9aec1cb2386f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -277,14 +277,14 @@ void __init mem_init(void)
 
 	set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
 
-	/* this will put all unused low memory onto the freelists */
-	memblock_free_all();
-
 #ifdef CONFIG_SA1111
 	/* now that our DMA memory is actually so designated, we can free it */
-	free_reserved_area(__va(PHYS_OFFSET), swapper_pg_dir, -1, NULL);
+	memblock_phys_free(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET);
 #endif
 
+	/* this will put all unused low memory onto the freelists */
+	memblock_free_all();
+
 	free_highpages();
 
 	/*
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 02/13] csky: move setup_initrd() to setup.c
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
  2025-03-06 18:51 ` [PATCH 01/13] arm: mem_init: use memblock_phys_free() to free DMA memory on SA1111 Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-10  0:43   ` Guo Ren
  2025-03-06 18:51 ` [PATCH 03/13] hexagon: move initialization of init_mm.context init to paging_init() Mike Rapoport
                   ` (12 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

Memory used by initrd should be reserved as soon as possible before
there any memblock allocations that might overwrite that memory.

This will also help with pulling out memblock_free_all() to the generic
code and reducing code duplication in arch::mem_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/csky/kernel/setup.c | 43 ++++++++++++++++++++++++++++++++++++++++
 arch/csky/mm/init.c      | 43 ----------------------------------------
 2 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/arch/csky/kernel/setup.c b/arch/csky/kernel/setup.c
index fe715b707fd0..e0d6ca86ea8c 100644
--- a/arch/csky/kernel/setup.c
+++ b/arch/csky/kernel/setup.c
@@ -12,6 +12,45 @@
 #include <asm/mmu_context.h>
 #include <asm/pgalloc.h>
 
+#ifdef CONFIG_BLK_DEV_INITRD
+static void __init setup_initrd(void)
+{
+	unsigned long size;
+
+	if (initrd_start >= initrd_end) {
+		pr_err("initrd not found or empty");
+		goto disable;
+	}
+
+	if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
+		pr_err("initrd extends beyond end of memory");
+		goto disable;
+	}
+
+	size = initrd_end - initrd_start;
+
+	if (memblock_is_region_reserved(__pa(initrd_start), size)) {
+		pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region",
+		       __pa(initrd_start), size);
+		goto disable;
+	}
+
+	memblock_reserve(__pa(initrd_start), size);
+
+	pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n",
+		(void *)(initrd_start), size);
+
+	initrd_below_start_ok = 1;
+
+	return;
+
+disable:
+	initrd_start = initrd_end = 0;
+
+	pr_err(" - disabling initrd\n");
+}
+#endif
+
 static void __init csky_memblock_init(void)
 {
 	unsigned long lowmem_size = PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
@@ -40,6 +79,10 @@ static void __init csky_memblock_init(void)
 		max_low_pfn = min_low_pfn + sseg_size;
 	}
 
+#ifdef CONFIG_BLK_DEV_INITRD
+	setup_initrd();
+#endif
+
 	max_zone_pfn[ZONE_NORMAL] = max_low_pfn;
 
 	mmu_init(min_low_pfn, max_low_pfn);
diff --git a/arch/csky/mm/init.c b/arch/csky/mm/init.c
index bde7cabd23df..ab51acbc19b2 100644
--- a/arch/csky/mm/init.c
+++ b/arch/csky/mm/init.c
@@ -42,45 +42,6 @@ unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]
 						__page_aligned_bss;
 EXPORT_SYMBOL(empty_zero_page);
 
-#ifdef CONFIG_BLK_DEV_INITRD
-static void __init setup_initrd(void)
-{
-	unsigned long size;
-
-	if (initrd_start >= initrd_end) {
-		pr_err("initrd not found or empty");
-		goto disable;
-	}
-
-	if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
-		pr_err("initrd extends beyond end of memory");
-		goto disable;
-	}
-
-	size = initrd_end - initrd_start;
-
-	if (memblock_is_region_reserved(__pa(initrd_start), size)) {
-		pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region",
-		       __pa(initrd_start), size);
-		goto disable;
-	}
-
-	memblock_reserve(__pa(initrd_start), size);
-
-	pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n",
-		(void *)(initrd_start), size);
-
-	initrd_below_start_ok = 1;
-
-	return;
-
-disable:
-	initrd_start = initrd_end = 0;
-
-	pr_err(" - disabling initrd\n");
-}
-#endif
-
 void __init mem_init(void)
 {
 #ifdef CONFIG_HIGHMEM
@@ -92,10 +53,6 @@ void __init mem_init(void)
 #endif
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
-#ifdef CONFIG_BLK_DEV_INITRD
-	setup_initrd();
-#endif
-
 	memblock_free_all();
 
 #ifdef CONFIG_HIGHMEM
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 03/13] hexagon: move initialization of init_mm.context init to paging_init()
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
  2025-03-06 18:51 ` [PATCH 01/13] arm: mem_init: use memblock_phys_free() to free DMA memory on SA1111 Mike Rapoport
  2025-03-06 18:51 ` [PATCH 02/13] csky: move setup_initrd() to setup.c Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 04/13] MIPS: consolidate mem_init() for NUMA machines Mike Rapoport
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

This will help with pulling out memblock_free_all() to the generic
code and reducing code duplication in arch::mem_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/hexagon/mm/init.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/arch/hexagon/mm/init.c b/arch/hexagon/mm/init.c
index 3458f39ca2ac..508bb6a8dcc9 100644
--- a/arch/hexagon/mm/init.c
+++ b/arch/hexagon/mm/init.c
@@ -59,14 +59,6 @@ void __init mem_init(void)
 	 *  To-Do:  someone somewhere should wipe out the bootmem map
 	 *  after we're done?
 	 */
-
-	/*
-	 * This can be moved to some more virtual-memory-specific
-	 * initialization hook at some point.  Set the init_mm
-	 * descriptors "context" value to point to the initial
-	 * kernel segment table's physical address.
-	 */
-	init_mm.context.ptbase = __pa(init_mm.pgd);
 }
 
 void sync_icache_dcache(pte_t pte)
@@ -103,6 +95,12 @@ static void __init paging_init(void)
 
 	free_area_init(max_zone_pfn);  /*  sets up the zonelists and mem_map  */
 
+	/*
+	 * Set the init_mm descriptors "context" value to point to the
+	 * initial kernel segment table's physical address.
+	 */
+	init_mm.context.ptbase = __pa(init_mm.pgd);
+
 	/*
 	 * Start of high memory area.  Will probably need something more
 	 * fancy if we...  get more fancy.
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 04/13] MIPS: consolidate mem_init() for NUMA machines
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (2 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 03/13] hexagon: move initialization of init_mm.context init to paging_init() Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 05/13] MIPS: make setup_zero_pages() use memblock Mike Rapoport
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

Both MIPS systems that support numa (loongsoon3 and sgi-ip27) have
identical mem_init() for NUMA case.

Move that into arch/mips/mm/init.c and drop duplicate per-machine
definitions.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/mips/loongson64/numa.c      | 7 -------
 arch/mips/mm/init.c              | 7 +++++++
 arch/mips/sgi-ip27/ip27-memory.c | 9 ---------
 3 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/arch/mips/loongson64/numa.c b/arch/mips/loongson64/numa.c
index 8388400d052f..95d5f553ce19 100644
--- a/arch/mips/loongson64/numa.c
+++ b/arch/mips/loongson64/numa.c
@@ -164,13 +164,6 @@ void __init paging_init(void)
 	free_area_init(zones_size);
 }
 
-void __init mem_init(void)
-{
-	high_memory = (void *) __va(get_num_physpages() << PAGE_SHIFT);
-	memblock_free_all();
-	setup_zero_pages();	/* This comes from node 0 */
-}
-
 /* All PCI device belongs to logical Node-0 */
 int pcibus_to_node(struct pci_bus *bus)
 {
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 4583d1a2a73e..3db6082c611e 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -482,6 +482,13 @@ void __init mem_init(void)
 				0x80000000 - 4, KCORE_TEXT);
 #endif
 }
+#else  /* CONFIG_NUMA */
+void __init mem_init(void)
+{
+	high_memory = (void *) __va(get_num_physpages() << PAGE_SHIFT);
+	memblock_free_all();
+	setup_zero_pages();	/* This comes from node 0 */
+}
 #endif /* !CONFIG_NUMA */
 
 void free_init_pages(const char *what, unsigned long begin, unsigned long end)
diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c
index 1963313f55d8..2b3e46e2e607 100644
--- a/arch/mips/sgi-ip27/ip27-memory.c
+++ b/arch/mips/sgi-ip27/ip27-memory.c
@@ -406,8 +406,6 @@ void __init prom_meminit(void)
 	}
 }
 
-extern void setup_zero_pages(void);
-
 void __init paging_init(void)
 {
 	unsigned long zones_size[MAX_NR_ZONES] = {0, };
@@ -416,10 +414,3 @@ void __init paging_init(void)
 	zones_size[ZONE_NORMAL] = max_low_pfn;
 	free_area_init(zones_size);
 }
-
-void __init mem_init(void)
-{
-	high_memory = (void *) __va(get_num_physpages() << PAGE_SHIFT);
-	memblock_free_all();
-	setup_zero_pages();	/* This comes from node 0 */
-}
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 05/13] MIPS: make setup_zero_pages() use memblock
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (3 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 04/13] MIPS: consolidate mem_init() for NUMA machines Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-11  5:57   ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 06/13] nios2: move pr_debug() about memory start and end to setup_arch() Mike Rapoport
                   ` (9 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

Allocating the zero pages from memblock is simpler because the memory is
already reserved.

This will also help with pulling out memblock_free_all() to the generic
code and reducing code duplication in arch::mem_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/mips/include/asm/mmzone.h |  2 --
 arch/mips/mm/init.c            | 16 +++++-----------
 2 files changed, 5 insertions(+), 13 deletions(-)

diff --git a/arch/mips/include/asm/mmzone.h b/arch/mips/include/asm/mmzone.h
index 14226ea42036..602a21aee9d4 100644
--- a/arch/mips/include/asm/mmzone.h
+++ b/arch/mips/include/asm/mmzone.h
@@ -20,6 +20,4 @@
 #define nid_to_addrbase(nid) 0
 #endif
 
-extern void setup_zero_pages(void);
-
 #endif /* _ASM_MMZONE_H_ */
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 3db6082c611e..f51cd97376df 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -59,25 +59,19 @@ EXPORT_SYMBOL(zero_page_mask);
 /*
  * Not static inline because used by IP27 special magic initialization code
  */
-void setup_zero_pages(void)
+static void __init setup_zero_pages(void)
 {
-	unsigned int order, i;
-	struct page *page;
+	unsigned int order;
 
 	if (cpu_has_vce)
 		order = 3;
 	else
 		order = 0;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, PAGE_SIZE);
 	if (!empty_zero_page)
 		panic("Oh boy, that early out of memory?");
 
-	page = virt_to_page((void *)empty_zero_page);
-	split_page(page, order);
-	for (i = 0; i < (1 << order); i++, page++)
-		mark_page_reserved(page);
-
 	zero_page_mask = ((PAGE_SIZE << order) - 1) & PAGE_MASK;
 }
 
@@ -470,9 +464,9 @@ void __init mem_init(void)
 	BUILD_BUG_ON(IS_ENABLED(CONFIG_32BIT) && (PFN_PTE_SHIFT > PAGE_SHIFT));
 
 	maar_init();
-	memblock_free_all();
 	setup_zero_pages();	/* Setup zeroed pages.  */
 	mem_init_free_highmem();
+	memblock_free_all();
 
 #ifdef CONFIG_64BIT
 	if ((unsigned long) &_text > (unsigned long) CKSEG0)
@@ -486,8 +480,8 @@ void __init mem_init(void)
 void __init mem_init(void)
 {
 	high_memory = (void *) __va(get_num_physpages() << PAGE_SHIFT);
-	memblock_free_all();
 	setup_zero_pages();	/* This comes from node 0 */
+	memblock_free_all();
 }
 #endif /* !CONFIG_NUMA */
 
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 06/13] nios2: move pr_debug() about memory start and end to setup_arch()
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (4 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 05/13] MIPS: make setup_zero_pages() use memblock Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 07/13] s390: make setup_zero_pages() use memblock Mike Rapoport
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

This will help with pulling out memblock_free_all() to the generic
code and reducing code duplication in arch::mem_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/nios2/kernel/setup.c | 2 ++
 arch/nios2/mm/init.c      | 2 --
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c
index da122a5fa43b..a4cffbfc1399 100644
--- a/arch/nios2/kernel/setup.c
+++ b/arch/nios2/kernel/setup.c
@@ -149,6 +149,8 @@ void __init setup_arch(char **cmdline_p)
 	memory_start = memblock_start_of_DRAM();
 	memory_end = memblock_end_of_DRAM();
 
+	pr_debug("%s: start=%lx, end=%lx\n", __func__, memory_start, memory_end);
+
 	setup_initial_init_mm(_stext, _etext, _edata, _end);
 	init_task.thread.kregs = &fake_regs;
 
diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index a2278485de19..aa692ad30044 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -65,8 +65,6 @@ void __init mem_init(void)
 	unsigned long end_mem   = memory_end; /* this must not include
 						kernel stack at top */
 
-	pr_debug("mem_init: start=%lx, end=%lx\n", memory_start, memory_end);
-
 	end_mem &= PAGE_MASK;
 	high_memory = __va(end_mem);
 
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 07/13] s390: make setup_zero_pages() use memblock
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (5 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 06/13] nios2: move pr_debug() about memory start and end to setup_arch() Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-07 15:28   ` Heiko Carstens
  2025-03-06 18:51 ` [PATCH 08/13] xtensa: split out printing of virtual memory layout to a function Mike Rapoport
                   ` (7 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

Allocating the zero pages from memblock is simpler because the memory is
already reserved.

This will also help with pulling out memblock_free_all() to the generic
code and reducing code duplication in arch::mem_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/s390/mm/init.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index f2298f7a3f21..020aa2f78d01 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -73,8 +73,6 @@ static void __init setup_zero_pages(void)
 {
 	unsigned long total_pages = memblock_estimated_nr_free_pages();
 	unsigned int order;
-	struct page *page;
-	int i;
 
 	/* Latest machines require a mapping granularity of 512KB */
 	order = 7;
@@ -83,17 +81,10 @@ static void __init setup_zero_pages(void)
 	while (order > 2 && (total_pages >> 10) < (1UL << order))
 		order--;
 
-	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
+	empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
 	if (!empty_zero_page)
 		panic("Out of memory in setup_zero_pages");
 
-	page = virt_to_page((void *) empty_zero_page);
-	split_page(page, order);
-	for (i = 1 << order; i > 0; i--) {
-		mark_page_reserved(page);
-		page++;
-	}
-
 	zero_page_mask = ((PAGE_SIZE << order) - 1) & PAGE_MASK;
 }
 
@@ -176,9 +167,10 @@ void __init mem_init(void)
 	pv_init();
 	kfence_split_mapping();
 
+	setup_zero_pages();	/* Setup zeroed pages. */
+
 	/* this will put all low memory onto the freelists */
 	memblock_free_all();
-	setup_zero_pages();	/* Setup zeroed pages. */
 }
 
 unsigned long memory_block_size_bytes(void)
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 08/13] xtensa: split out printing of virtual memory layout to a function
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (6 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 07/13] s390: make setup_zero_pages() use memblock Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 09/13] arch, mm: set max_mapnr when allocating memory map for FLATMEM Mike Rapoport
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

This will help with pulling out memblock_free_all() to the generic
code and reducing code duplication in arch::mem_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/xtensa/mm/init.c | 97 ++++++++++++++++++++++---------------------
 1 file changed, 50 insertions(+), 47 deletions(-)

diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index b2587a1a7c46..01577d33e602 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -66,6 +66,55 @@ void __init bootmem_init(void)
 	memblock_dump_all();
 }
 
+static void __init print_vm_layout(void)
+{
+	pr_info("virtual kernel memory layout:\n"
+#ifdef CONFIG_KASAN
+		"    kasan   : 0x%08lx - 0x%08lx  (%5lu MB)\n"
+#endif
+#ifdef CONFIG_MMU
+		"    vmalloc : 0x%08lx - 0x%08lx  (%5lu MB)\n"
+#endif
+#ifdef CONFIG_HIGHMEM
+		"    pkmap   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
+		"    fixmap  : 0x%08lx - 0x%08lx  (%5lu kB)\n"
+#endif
+		"    lowmem  : 0x%08lx - 0x%08lx  (%5lu MB)\n"
+		"    .text   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
+		"    .rodata : 0x%08lx - 0x%08lx  (%5lu kB)\n"
+		"    .data   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
+		"    .init   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
+		"    .bss    : 0x%08lx - 0x%08lx  (%5lu kB)\n",
+#ifdef CONFIG_KASAN
+		KASAN_SHADOW_START, KASAN_SHADOW_START + KASAN_SHADOW_SIZE,
+		KASAN_SHADOW_SIZE >> 20,
+#endif
+#ifdef CONFIG_MMU
+		VMALLOC_START, VMALLOC_END,
+		(VMALLOC_END - VMALLOC_START) >> 20,
+#ifdef CONFIG_HIGHMEM
+		PKMAP_BASE, PKMAP_BASE + LAST_PKMAP * PAGE_SIZE,
+		(LAST_PKMAP*PAGE_SIZE) >> 10,
+		FIXADDR_START, FIXADDR_END,
+		(FIXADDR_END - FIXADDR_START) >> 10,
+#endif
+		PAGE_OFFSET, PAGE_OFFSET +
+		(max_low_pfn - min_low_pfn) * PAGE_SIZE,
+#else
+		min_low_pfn * PAGE_SIZE, max_low_pfn * PAGE_SIZE,
+#endif
+		((max_low_pfn - min_low_pfn) * PAGE_SIZE) >> 20,
+		(unsigned long)_text, (unsigned long)_etext,
+		(unsigned long)(_etext - _text) >> 10,
+		(unsigned long)__start_rodata, (unsigned long)__end_rodata,
+		(unsigned long)(__end_rodata - __start_rodata) >> 10,
+		(unsigned long)_sdata, (unsigned long)_edata,
+		(unsigned long)(_edata - _sdata) >> 10,
+		(unsigned long)__init_begin, (unsigned long)__init_end,
+		(unsigned long)(__init_end - __init_begin) >> 10,
+		(unsigned long)__bss_start, (unsigned long)__bss_stop,
+		(unsigned long)(__bss_stop - __bss_start) >> 10);
+}
 
 void __init zones_init(void)
 {
@@ -77,6 +126,7 @@ void __init zones_init(void)
 #endif
 	};
 	free_area_init(max_zone_pfn);
+	print_vm_layout();
 }
 
 static void __init free_highpages(void)
@@ -118,53 +168,6 @@ void __init mem_init(void)
 	high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT);
 
 	memblock_free_all();
-
-	pr_info("virtual kernel memory layout:\n"
-#ifdef CONFIG_KASAN
-		"    kasan   : 0x%08lx - 0x%08lx  (%5lu MB)\n"
-#endif
-#ifdef CONFIG_MMU
-		"    vmalloc : 0x%08lx - 0x%08lx  (%5lu MB)\n"
-#endif
-#ifdef CONFIG_HIGHMEM
-		"    pkmap   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
-		"    fixmap  : 0x%08lx - 0x%08lx  (%5lu kB)\n"
-#endif
-		"    lowmem  : 0x%08lx - 0x%08lx  (%5lu MB)\n"
-		"    .text   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
-		"    .rodata : 0x%08lx - 0x%08lx  (%5lu kB)\n"
-		"    .data   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
-		"    .init   : 0x%08lx - 0x%08lx  (%5lu kB)\n"
-		"    .bss    : 0x%08lx - 0x%08lx  (%5lu kB)\n",
-#ifdef CONFIG_KASAN
-		KASAN_SHADOW_START, KASAN_SHADOW_START + KASAN_SHADOW_SIZE,
-		KASAN_SHADOW_SIZE >> 20,
-#endif
-#ifdef CONFIG_MMU
-		VMALLOC_START, VMALLOC_END,
-		(VMALLOC_END - VMALLOC_START) >> 20,
-#ifdef CONFIG_HIGHMEM
-		PKMAP_BASE, PKMAP_BASE + LAST_PKMAP * PAGE_SIZE,
-		(LAST_PKMAP*PAGE_SIZE) >> 10,
-		FIXADDR_START, FIXADDR_END,
-		(FIXADDR_END - FIXADDR_START) >> 10,
-#endif
-		PAGE_OFFSET, PAGE_OFFSET +
-		(max_low_pfn - min_low_pfn) * PAGE_SIZE,
-#else
-		min_low_pfn * PAGE_SIZE, max_low_pfn * PAGE_SIZE,
-#endif
-		((max_low_pfn - min_low_pfn) * PAGE_SIZE) >> 20,
-		(unsigned long)_text, (unsigned long)_etext,
-		(unsigned long)(_etext - _text) >> 10,
-		(unsigned long)__start_rodata, (unsigned long)__end_rodata,
-		(unsigned long)(__end_rodata - __start_rodata) >> 10,
-		(unsigned long)_sdata, (unsigned long)_edata,
-		(unsigned long)(_edata - _sdata) >> 10,
-		(unsigned long)__init_begin, (unsigned long)__init_end,
-		(unsigned long)(__init_end - __init_begin) >> 10,
-		(unsigned long)__bss_start, (unsigned long)__bss_stop,
-		(unsigned long)(__bss_stop - __bss_start) >> 10);
 }
 
 static void __init parse_memmap_one(char *p)
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 09/13] arch, mm: set max_mapnr when allocating memory map for FLATMEM
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (7 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 08/13] xtensa: split out printing of virtual memory layout to a function Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 10/13] arch, mm: set high_memory in free_area_init() Mike Rapoport
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

max_mapnr is essentially the size of the memory map for systems that use
FLATMEM. There is no reason to calculate it in each and every architecture
when it's anyway calculated in alloc_node_mem_map().

Drop setting of max_mapnr from architecture code and set it once in
alloc_node_mem_map().

While on it, move definition of mem_map and max_mapnr to mm/mm_init.c so
there won't be two copies for MMU and !MMU variants.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/alpha/mm/init.c               |  1 -
 arch/arc/mm/init.c                 |  5 -----
 arch/arm/mm/init.c                 |  2 --
 arch/csky/mm/init.c                |  4 ----
 arch/loongarch/mm/init.c           |  1 -
 arch/microblaze/mm/init.c          |  4 ----
 arch/mips/mm/init.c                |  8 --------
 arch/nios2/kernel/setup.c          |  1 -
 arch/nios2/mm/init.c               |  2 +-
 arch/openrisc/mm/init.c            |  1 -
 arch/parisc/mm/init.c              |  1 -
 arch/powerpc/kernel/setup-common.c |  2 --
 arch/riscv/mm/init.c               |  1 -
 arch/s390/mm/init.c                |  1 -
 arch/sh/mm/init.c                  |  1 -
 arch/sparc/mm/init_32.c            |  1 -
 arch/um/include/shared/mem_user.h  |  1 -
 arch/um/kernel/physmem.c           | 12 ------------
 arch/um/kernel/um_arch.c           |  1 -
 arch/x86/mm/init_32.c              |  3 ---
 arch/xtensa/mm/init.c              |  1 -
 include/asm-generic/memory_model.h |  5 +++--
 include/linux/mm.h                 | 11 -----------
 mm/memory.c                        |  8 --------
 mm/mm_init.c                       | 25 +++++++++++++++++--------
 mm/nommu.c                         |  4 ----
 26 files changed, 21 insertions(+), 86 deletions(-)

diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c
index 61c2198b1359..ec0eeae9c653 100644
--- a/arch/alpha/mm/init.c
+++ b/arch/alpha/mm/init.c
@@ -276,7 +276,6 @@ srm_paging_stop (void)
 void __init
 mem_init(void)
 {
-	set_max_mapnr(max_low_pfn);
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 	memblock_free_all();
 }
diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
index 6a71b23f1383..7ef883d58dc1 100644
--- a/arch/arc/mm/init.c
+++ b/arch/arc/mm/init.c
@@ -154,11 +154,6 @@ void __init setup_arch_memory(void)
 
 	arch_pfn_offset = min(min_low_pfn, min_high_pfn);
 	kmap_init();
-
-#else /* CONFIG_HIGHMEM */
-	/* pfn_valid() uses this when FLATMEM=y and HIGHMEM=n */
-	max_mapnr = max_low_pfn - min_low_pfn;
-
 #endif /* CONFIG_HIGHMEM */
 
 	free_area_init(max_zone_pfn);
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 9aec1cb2386f..d4bcc745a044 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -275,8 +275,6 @@ void __init mem_init(void)
 	swiotlb_init(max_pfn > arm_dma_pfn_limit, SWIOTLB_VERBOSE);
 #endif
 
-	set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
-
 #ifdef CONFIG_SA1111
 	/* now that our DMA memory is actually so designated, we can free it */
 	memblock_phys_free(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET);
diff --git a/arch/csky/mm/init.c b/arch/csky/mm/init.c
index ab51acbc19b2..ba6694d6170a 100644
--- a/arch/csky/mm/init.c
+++ b/arch/csky/mm/init.c
@@ -46,10 +46,6 @@ void __init mem_init(void)
 {
 #ifdef CONFIG_HIGHMEM
 	unsigned long tmp;
-
-	set_max_mapnr(highend_pfn - ARCH_PFN_OFFSET);
-#else
-	set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
 #endif
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
diff --git a/arch/loongarch/mm/init.c b/arch/loongarch/mm/init.c
index ca5aa5f46a9f..00449df50db1 100644
--- a/arch/loongarch/mm/init.c
+++ b/arch/loongarch/mm/init.c
@@ -78,7 +78,6 @@ void __init paging_init(void)
 
 void __init mem_init(void)
 {
-	max_mapnr = max_low_pfn;
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
 	memblock_free_all();
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c
index 4520c5741579..857cd2b44bcf 100644
--- a/arch/microblaze/mm/init.c
+++ b/arch/microblaze/mm/init.c
@@ -104,17 +104,13 @@ void __init setup_memory(void)
 	 *
 	 * min_low_pfn - the first page (mm/bootmem.c - node_boot_start)
 	 * max_low_pfn
-	 * max_mapnr - the first unused page (mm/bootmem.c - node_low_pfn)
 	 */
 
 	/* memory start is from the kernel end (aligned) to higher addr */
 	min_low_pfn = memory_start >> PAGE_SHIFT; /* minimum for allocation */
-	/* RAM is assumed contiguous */
-	max_mapnr = memory_size >> PAGE_SHIFT;
 	max_low_pfn = ((u64)memory_start + (u64)lowmem_size) >> PAGE_SHIFT;
 	max_pfn = ((u64)memory_start + (u64)memory_size) >> PAGE_SHIFT;
 
-	pr_info("%s: max_mapnr: %#lx\n", __func__, max_mapnr);
 	pr_info("%s: min_low_pfn: %#lx\n", __func__, min_low_pfn);
 	pr_info("%s: max_low_pfn: %#lx\n", __func__, max_low_pfn);
 	pr_info("%s: max_pfn: %#lx\n", __func__, max_pfn);
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index f51cd97376df..338b3c9fc5bc 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -417,15 +417,7 @@ void __init paging_init(void)
 		       " %ldk highmem ignored\n",
 		       (highend_pfn - max_low_pfn) << (PAGE_SHIFT - 10));
 		max_zone_pfns[ZONE_HIGHMEM] = max_low_pfn;
-
-		max_mapnr = max_low_pfn;
-	} else if (highend_pfn) {
-		max_mapnr = highend_pfn;
-	} else {
-		max_mapnr = max_low_pfn;
 	}
-#else
-	max_mapnr = max_low_pfn;
 #endif
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c
index a4cffbfc1399..2a40150142c3 100644
--- a/arch/nios2/kernel/setup.c
+++ b/arch/nios2/kernel/setup.c
@@ -158,7 +158,6 @@ void __init setup_arch(char **cmdline_p)
 	*cmdline_p = boot_command_line;
 
 	find_limits(&min_low_pfn, &max_low_pfn, &max_pfn);
-	max_mapnr = max_low_pfn;
 
 	memblock_reserve(__pa_symbol(_stext), _end - _stext);
 #ifdef CONFIG_BLK_DEV_INITRD
diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index aa692ad30044..3cafa87ead9e 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -51,7 +51,7 @@ void __init paging_init(void)
 	pagetable_init();
 	pgd_current = swapper_pg_dir;
 
-	max_zone_pfn[ZONE_NORMAL] = max_mapnr;
+	max_zone_pfn[ZONE_NORMAL] = max_low_pfn;
 
 	/* pass the memory from the bootmem allocator to the main allocator */
 	free_area_init(max_zone_pfn);
diff --git a/arch/openrisc/mm/init.c b/arch/openrisc/mm/init.c
index d0cb1a0126f9..9093c336e158 100644
--- a/arch/openrisc/mm/init.c
+++ b/arch/openrisc/mm/init.c
@@ -193,7 +193,6 @@ void __init mem_init(void)
 {
 	BUG_ON(!mem_map);
 
-	max_mapnr = max_low_pfn;
 	high_memory = (void *)__va(max_low_pfn * PAGE_SIZE);
 
 	/* clear the zero-page */
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
index 61c0a2477072..2cdfc0b1195c 100644
--- a/arch/parisc/mm/init.c
+++ b/arch/parisc/mm/init.c
@@ -563,7 +563,6 @@ void __init mem_init(void)
 #endif
 
 	high_memory = __va((max_pfn << PAGE_SHIFT));
-	set_max_mapnr(max_low_pfn);
 	memblock_free_all();
 
 #ifdef CONFIG_PA11
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index a08b0ede4e64..68d47c53876c 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -957,8 +957,6 @@ void __init setup_arch(char **cmdline_p)
 
 	/* Parse memory topology */
 	mem_topology_setup();
-	/* Set max_mapnr before paging_init() */
-	set_max_mapnr(max_pfn);
 	high_memory = (void *)__va(max_low_pfn * PAGE_SIZE);
 
 	/*
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 15b2eda4c364..157c9ca51541 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -298,7 +298,6 @@ static void __init setup_bootmem(void)
 	high_memory = (void *)(__va(PFN_PHYS(max_low_pfn)));
 
 	dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
-	set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
 
 	reserve_initrd_mem();
 
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index 020aa2f78d01..7e64243693c9 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -161,7 +161,6 @@ void __init mem_init(void)
 	cpumask_set_cpu(0, &init_mm.context.cpu_attach_mask);
 	cpumask_set_cpu(0, mm_cpumask(&init_mm));
 
-	set_max_mapnr(max_low_pfn);
         high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 
 	pv_init();
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
index 289a2fecebef..72aea5cd1b85 100644
--- a/arch/sh/mm/init.c
+++ b/arch/sh/mm/init.c
@@ -290,7 +290,6 @@ void __init paging_init(void)
 	 */
 	max_low_pfn = max_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT;
 	min_low_pfn = __MEMORY_START >> PAGE_SHIFT;
-	set_max_mapnr(max_low_pfn - min_low_pfn);
 
 	nodes_clear(node_online_map);
 
diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
index d96a14ffceeb..6b58da14edc6 100644
--- a/arch/sparc/mm/init_32.c
+++ b/arch/sparc/mm/init_32.c
@@ -275,7 +275,6 @@ void __init mem_init(void)
 
 	taint_real_pages();
 
-	max_mapnr = last_valid_pfn - pfn_base;
 	high_memory = __va(max_low_pfn << PAGE_SHIFT);
 	memblock_free_all();
 
diff --git a/arch/um/include/shared/mem_user.h b/arch/um/include/shared/mem_user.h
index adfa08062f88..d4727efcf23d 100644
--- a/arch/um/include/shared/mem_user.h
+++ b/arch/um/include/shared/mem_user.h
@@ -47,7 +47,6 @@ extern int iomem_size;
 #define ROUND_4M(n) ((((unsigned long) (n)) + (1 << 22)) & ~((1 << 22) - 1))
 
 extern unsigned long find_iomem(char *driver, unsigned long *len_out);
-extern void mem_total_pages(unsigned long physmem, unsigned long iomem);
 extern void setup_physmem(unsigned long start, unsigned long usable,
 			  unsigned long len);
 extern void map_memory(unsigned long virt, unsigned long phys,
diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c
index a74f17b033c4..af02b5f9911d 100644
--- a/arch/um/kernel/physmem.c
+++ b/arch/um/kernel/physmem.c
@@ -22,18 +22,6 @@ static int physmem_fd = -1;
 unsigned long high_physmem;
 EXPORT_SYMBOL(high_physmem);
 
-void __init mem_total_pages(unsigned long physmem, unsigned long iomem)
-{
-	unsigned long phys_pages, iomem_pages, total_pages;
-
-	phys_pages  = physmem >> PAGE_SHIFT;
-	iomem_pages = iomem   >> PAGE_SHIFT;
-
-	total_pages = phys_pages + iomem_pages;
-
-	max_mapnr = total_pages;
-}
-
 void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
 		int r, int w, int x)
 {
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 79ea97d4797e..6414cbf00572 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -419,7 +419,6 @@ void __init setup_arch(char **cmdline_p)
 
 	stack_protections((unsigned long) init_task.stack);
 	setup_physmem(uml_physmem, uml_reserved, physmem_size);
-	mem_total_pages(physmem_size, iomem_size);
 	uml_dtb_init();
 	read_initrd();
 
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index ac41b1e0940d..6d2f8cb9451e 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -650,9 +650,6 @@ void __init initmem_init(void)
 
 	memblock_set_node(0, PHYS_ADDR_MAX, &memblock.memory, 0);
 
-#ifdef CONFIG_FLATMEM
-	max_mapnr = IS_ENABLED(CONFIG_HIGHMEM) ? highend_pfn : max_low_pfn;
-#endif
 	__vmalloc_start_set = true;
 
 	printk(KERN_NOTICE "%ldMB LOWMEM available.\n",
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index 01577d33e602..9f1b0d5fccc7 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -164,7 +164,6 @@ void __init mem_init(void)
 {
 	free_highpages();
 
-	max_mapnr = max_pfn - ARCH_PFN_OFFSET;
 	high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT);
 
 	memblock_free_all();
diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h
index 6d1fb6162ac1..a3b5029aebbd 100644
--- a/include/asm-generic/memory_model.h
+++ b/include/asm-generic/memory_model.h
@@ -19,11 +19,12 @@
 #define __page_to_pfn(page)	((unsigned long)((page) - mem_map) + \
 				 ARCH_PFN_OFFSET)
 
+/* avoid <linux/mm.h> include hell */
+extern unsigned long max_mapnr;
+
 #ifndef pfn_valid
 static inline int pfn_valid(unsigned long pfn)
 {
-	/* avoid <linux/mm.h> include hell */
-	extern unsigned long max_mapnr;
 	unsigned long pfn_offset = ARCH_PFN_OFFSET;
 
 	return pfn >= pfn_offset && (pfn - pfn_offset) < max_mapnr;
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 7b1068ddcbb7..fdf20503850e 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -45,17 +45,6 @@ extern int sysctl_page_lock_unfairness;
 void mm_core_init(void);
 void init_mm_internals(void);
 
-#ifndef CONFIG_NUMA		/* Don't use mapnrs, do it properly */
-extern unsigned long max_mapnr;
-
-static inline void set_max_mapnr(unsigned long limit)
-{
-	max_mapnr = limit;
-}
-#else
-static inline void set_max_mapnr(unsigned long limit) { }
-#endif
-
 extern atomic_long_t _totalram_pages;
 static inline unsigned long totalram_pages(void)
 {
diff --git a/mm/memory.c b/mm/memory.c
index b4d3d4893267..126fdd3001e3 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -95,14 +95,6 @@
 #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
 #endif
 
-#ifndef CONFIG_NUMA
-unsigned long max_mapnr;
-EXPORT_SYMBOL(max_mapnr);
-
-struct page *mem_map;
-EXPORT_SYMBOL(mem_map);
-#endif
-
 static vm_fault_t do_fault(struct vm_fault *vmf);
 static vm_fault_t do_anonymous_page(struct vm_fault *vmf);
 static bool vmf_pte_changed(struct vm_fault *vmf);
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 2630cc30147e..50a93714e1c6 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -36,6 +36,14 @@
 
 #include <asm/setup.h>
 
+#ifndef CONFIG_NUMA
+unsigned long max_mapnr;
+EXPORT_SYMBOL(max_mapnr);
+
+struct page *mem_map;
+EXPORT_SYMBOL(mem_map);
+#endif
+
 #ifdef CONFIG_DEBUG_MEMORY_INIT
 int __meminitdata mminit_loglevel;
 
@@ -1617,7 +1625,7 @@ static void __init alloc_node_mem_map(struct pglist_data *pgdat)
 	start = pgdat->node_start_pfn & ~(MAX_ORDER_NR_PAGES - 1);
 	offset = pgdat->node_start_pfn - start;
 	/*
-		 * The zone's endpoints aren't required to be MAX_PAGE_ORDER
+	 * The zone's endpoints aren't required to be MAX_PAGE_ORDER
 	 * aligned but the node_mem_map endpoints must be in order
 	 * for the buddy allocator to function correctly.
 	 */
@@ -1633,14 +1641,15 @@ static void __init alloc_node_mem_map(struct pglist_data *pgdat)
 	pr_debug("%s: node %d, pgdat %08lx, node_mem_map %08lx\n",
 		 __func__, pgdat->node_id, (unsigned long)pgdat,
 		 (unsigned long)pgdat->node_mem_map);
-#ifndef CONFIG_NUMA
+
 	/* the global mem_map is just set as node 0's */
-	if (pgdat == NODE_DATA(0)) {
-		mem_map = NODE_DATA(0)->node_mem_map;
-		if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
-			mem_map -= offset;
-	}
-#endif
+	WARN_ON(pgdat != NODE_DATA(0));
+
+	mem_map = pgdat->node_mem_map;
+	if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
+		mem_map -= offset;
+
+	max_mapnr = end - start;
 }
 #else
 static inline void alloc_node_mem_map(struct pglist_data *pgdat) { }
diff --git a/mm/nommu.c b/mm/nommu.c
index baa79abdaf03..f0209dd26dfa 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -44,16 +44,12 @@
 
 void *high_memory;
 EXPORT_SYMBOL(high_memory);
-struct page *mem_map;
-unsigned long max_mapnr;
-EXPORT_SYMBOL(max_mapnr);
 unsigned long highest_memmap_pfn;
 int sysctl_nr_trim_pages = CONFIG_NOMMU_INITIAL_TRIM_EXCESS;
 int heap_stack_gap = 0;
 
 atomic_long_t mmap_pages_allocated;
 
-EXPORT_SYMBOL(mem_map);
 
 /* list of mapped, potentially shareable regions */
 static struct kmem_cache *vm_region_jar;
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (8 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 09/13] arch, mm: set max_mapnr when allocating memory map for FLATMEM Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-11 17:51   ` Mark Brown
  2025-03-06 18:51 ` [PATCH 11/13] arch, mm: streamline HIGHMEM freeing Mike Rapoport
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

high_memory defines upper bound on the directly mapped memory.
This bound is defined by the beginning of ZONE_HIGHMEM when a system has
high memory and by the end of memory otherwise.

All this is known to generic memory management initialization code that
can set high_memory while initializing core mm structures.

Remove per-architecture calculation of high_memory and add a generic
version to free_area_init().

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/alpha/mm/init.c               |  1 -
 arch/arc/mm/init.c                 |  2 --
 arch/arm/mm/mmu.c                  |  2 --
 arch/arm/mm/nommu.c                |  1 -
 arch/arm64/mm/init.c               |  2 --
 arch/csky/mm/init.c                |  1 -
 arch/hexagon/mm/init.c             |  6 ------
 arch/loongarch/kernel/numa.c       |  1 -
 arch/loongarch/mm/init.c           |  2 --
 arch/m68k/mm/init.c                |  2 --
 arch/m68k/mm/mcfmmu.c              |  1 -
 arch/m68k/mm/motorola.c            |  2 --
 arch/m68k/sun3/config.c            |  1 -
 arch/microblaze/mm/init.c          |  2 --
 arch/mips/mm/init.c                |  2 --
 arch/nios2/mm/init.c               |  6 ------
 arch/openrisc/mm/init.c            |  2 --
 arch/parisc/mm/init.c              |  1 -
 arch/powerpc/kernel/setup-common.c |  1 -
 arch/riscv/mm/init.c               |  1 -
 arch/s390/mm/init.c                |  2 --
 arch/sh/mm/init.c                  |  7 -------
 arch/sparc/mm/init_32.c            |  1 -
 arch/sparc/mm/init_64.c            |  2 --
 arch/um/kernel/um_arch.c           |  1 -
 arch/x86/kernel/setup.c            |  2 --
 arch/x86/mm/init_32.c              |  3 ---
 arch/x86/mm/numa_32.c              |  3 ---
 arch/xtensa/mm/init.c              |  2 --
 mm/memory.c                        |  8 --------
 mm/mm_init.c                       | 23 +++++++++++++++++++++++
 mm/nommu.c                         |  2 --
 32 files changed, 23 insertions(+), 72 deletions(-)

diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c
index ec0eeae9c653..3ab2d2f3c917 100644
--- a/arch/alpha/mm/init.c
+++ b/arch/alpha/mm/init.c
@@ -276,7 +276,6 @@ srm_paging_stop (void)
 void __init
 mem_init(void)
 {
-	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 	memblock_free_all();
 }
 
diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
index 7ef883d58dc1..05025122e965 100644
--- a/arch/arc/mm/init.c
+++ b/arch/arc/mm/init.c
@@ -150,8 +150,6 @@ void __init setup_arch_memory(void)
 	 */
 	max_zone_pfn[ZONE_HIGHMEM] = max_high_pfn;
 
-	high_memory = (void *)(min_high_pfn << PAGE_SHIFT);
-
 	arch_pfn_offset = min(min_low_pfn, min_high_pfn);
 	kmap_init();
 #endif /* CONFIG_HIGHMEM */
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index f02f872ea8a9..e492d58a0386 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1250,8 +1250,6 @@ void __init adjust_lowmem_bounds(void)
 
 	arm_lowmem_limit = lowmem_limit;
 
-	high_memory = __va(arm_lowmem_limit - 1) + 1;
-
 	if (!memblock_limit)
 		memblock_limit = arm_lowmem_limit;
 
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c
index 1a8f6914ee59..65903ed5e80d 100644
--- a/arch/arm/mm/nommu.c
+++ b/arch/arm/mm/nommu.c
@@ -146,7 +146,6 @@ void __init adjust_lowmem_bounds(void)
 	phys_addr_t end;
 	adjust_lowmem_bounds_mpu();
 	end = memblock_end_of_DRAM();
-	high_memory = __va(end - 1) + 1;
 	memblock_set_current_limit(end);
 }
 
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index 9c0b8d9558fc..a48fcccd67fa 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -314,8 +314,6 @@ void __init arm64_memblock_init(void)
 	}
 
 	early_init_fdt_scan_reserved_mem();
-
-	high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
 }
 
 void __init bootmem_init(void)
diff --git a/arch/csky/mm/init.c b/arch/csky/mm/init.c
index ba6694d6170a..a22801aa503a 100644
--- a/arch/csky/mm/init.c
+++ b/arch/csky/mm/init.c
@@ -47,7 +47,6 @@ void __init mem_init(void)
 #ifdef CONFIG_HIGHMEM
 	unsigned long tmp;
 #endif
-	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
 	memblock_free_all();
 
diff --git a/arch/hexagon/mm/init.c b/arch/hexagon/mm/init.c
index 508bb6a8dcc9..d412c2314509 100644
--- a/arch/hexagon/mm/init.c
+++ b/arch/hexagon/mm/init.c
@@ -100,12 +100,6 @@ static void __init paging_init(void)
 	 * initial kernel segment table's physical address.
 	 */
 	init_mm.context.ptbase = __pa(init_mm.pgd);
-
-	/*
-	 * Start of high memory area.  Will probably need something more
-	 * fancy if we...  get more fancy.
-	 */
-	high_memory = (void *)((bootmem_lastpg + 1) << PAGE_SHIFT);
 }
 
 #ifndef DMA_RESERVE
diff --git a/arch/loongarch/kernel/numa.c b/arch/loongarch/kernel/numa.c
index 84fe7f854820..8eb489725b1a 100644
--- a/arch/loongarch/kernel/numa.c
+++ b/arch/loongarch/kernel/numa.c
@@ -389,7 +389,6 @@ void __init paging_init(void)
 
 void __init mem_init(void)
 {
-	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 	memblock_free_all();
 }
 
diff --git a/arch/loongarch/mm/init.c b/arch/loongarch/mm/init.c
index 00449df50db1..6affa3609188 100644
--- a/arch/loongarch/mm/init.c
+++ b/arch/loongarch/mm/init.c
@@ -78,8 +78,6 @@ void __init paging_init(void)
 
 void __init mem_init(void)
 {
-	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
-
 	memblock_free_all();
 }
 #endif /* !CONFIG_NUMA */
diff --git a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c
index 8b11d0d545aa..e03ac556c59e 100644
--- a/arch/m68k/mm/init.c
+++ b/arch/m68k/mm/init.c
@@ -66,8 +66,6 @@ void __init paging_init(void)
 	unsigned long end_mem = memory_end & PAGE_MASK;
 	unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0, };
 
-	high_memory = (void *) end_mem;
-
 	empty_zero_page = memblock_alloc_or_panic(PAGE_SIZE, PAGE_SIZE);
 	max_zone_pfn[ZONE_DMA] = end_mem >> PAGE_SHIFT;
 	free_area_init(max_zone_pfn);
diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
index 19a75029036c..1750cf9f0369 100644
--- a/arch/m68k/mm/mcfmmu.c
+++ b/arch/m68k/mm/mcfmmu.c
@@ -168,7 +168,6 @@ void __init cf_bootmem_alloc(void)
 	memstart = PAGE_ALIGN(_ramstart);
 	min_low_pfn = PFN_DOWN(_rambase);
 	max_pfn = max_low_pfn = PFN_DOWN(_ramend);
-	high_memory = (void *)_ramend;
 
 	/* Reserve kernel text/data/bss */
 	memblock_reserve(_rambase, memstart - _rambase);
diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
index 73651e093c4d..312efcd4b353 100644
--- a/arch/m68k/mm/motorola.c
+++ b/arch/m68k/mm/motorola.c
@@ -472,8 +472,6 @@ void __init paging_init(void)
 	module_fixup(NULL, __start_fixup, __stop_fixup);
 	flush_icache();
 
-	high_memory = phys_to_virt(max_addr) + 1;
-
 	min_low_pfn = availmem >> PAGE_SHIFT;
 	max_pfn = max_low_pfn = (max_addr >> PAGE_SHIFT) + 1;
 
diff --git a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c
index cd8af809e0ca..925818278e34 100644
--- a/arch/m68k/sun3/config.c
+++ b/arch/m68k/sun3/config.c
@@ -115,7 +115,6 @@ static void __init sun3_bootmem_alloc(unsigned long memory_start,
 
 	max_pfn = num_pages = __pa(memory_end) >> PAGE_SHIFT;
 
-	high_memory = (void *)memory_end;
 	availmem = memory_start;
 
 	m68k_setup_node(0);
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c
index 857cd2b44bcf..7e2e342e84c5 100644
--- a/arch/microblaze/mm/init.c
+++ b/arch/microblaze/mm/init.c
@@ -120,8 +120,6 @@ void __init setup_memory(void)
 
 void __init mem_init(void)
 {
-	high_memory = (void *)__va(memory_start + lowmem_size - 1);
-
 	/* this will put all memory onto the freelists */
 	memblock_free_all();
 #ifdef CONFIG_HIGHMEM
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 338b3c9fc5bc..99cefb58fba3 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -419,7 +419,6 @@ void __init paging_init(void)
 		max_zone_pfns[ZONE_HIGHMEM] = max_low_pfn;
 	}
 #endif
-	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
 	free_area_init(max_zone_pfns);
 }
@@ -471,7 +470,6 @@ void __init mem_init(void)
 #else  /* CONFIG_NUMA */
 void __init mem_init(void)
 {
-	high_memory = (void *) __va(get_num_physpages() << PAGE_SHIFT);
 	setup_zero_pages();	/* This comes from node 0 */
 	memblock_free_all();
 }
diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index 3cafa87ead9e..4ba8dfa0d238 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -62,12 +62,6 @@ void __init paging_init(void)
 
 void __init mem_init(void)
 {
-	unsigned long end_mem   = memory_end; /* this must not include
-						kernel stack at top */
-
-	end_mem &= PAGE_MASK;
-	high_memory = __va(end_mem);
-
 	/* this will put all memory onto the freelists */
 	memblock_free_all();
 }
diff --git a/arch/openrisc/mm/init.c b/arch/openrisc/mm/init.c
index 9093c336e158..72c5952607ac 100644
--- a/arch/openrisc/mm/init.c
+++ b/arch/openrisc/mm/init.c
@@ -193,8 +193,6 @@ void __init mem_init(void)
 {
 	BUG_ON(!mem_map);
 
-	high_memory = (void *)__va(max_low_pfn * PAGE_SIZE);
-
 	/* clear the zero-page */
 	memset((void *)empty_zero_page, 0, PAGE_SIZE);
 
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
index 2cdfc0b1195c..4fbe354dc9b4 100644
--- a/arch/parisc/mm/init.c
+++ b/arch/parisc/mm/init.c
@@ -562,7 +562,6 @@ void __init mem_init(void)
 	BUILD_BUG_ON(TMPALIAS_MAP_START >= 0x80000000);
 #endif
 
-	high_memory = __va((max_pfn << PAGE_SHIFT));
 	memblock_free_all();
 
 #ifdef CONFIG_PA11
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 68d47c53876c..de34c40ccb21 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -957,7 +957,6 @@ void __init setup_arch(char **cmdline_p)
 
 	/* Parse memory topology */
 	mem_topology_setup();
-	high_memory = (void *)__va(max_low_pfn * PAGE_SIZE);
 
 	/*
 	 * Release secondary cpus out of their spinloops at 0x60 now that
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 157c9ca51541..ac6d41e86243 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -295,7 +295,6 @@ static void __init setup_bootmem(void)
 	phys_ram_end = memblock_end_of_DRAM();
 	min_low_pfn = PFN_UP(phys_ram_base);
 	max_low_pfn = max_pfn = PFN_DOWN(phys_ram_end);
-	high_memory = (void *)(__va(PFN_PHYS(max_low_pfn)));
 
 	dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
 
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index 7e64243693c9..08ebc9a9344a 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -161,8 +161,6 @@ void __init mem_init(void)
 	cpumask_set_cpu(0, &init_mm.context.cpu_attach_mask);
 	cpumask_set_cpu(0, mm_cpumask(&init_mm));
 
-        high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
-
 	pv_init();
 	kfence_split_mapping();
 
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
index 72aea5cd1b85..6d459ffba4bc 100644
--- a/arch/sh/mm/init.c
+++ b/arch/sh/mm/init.c
@@ -330,13 +330,6 @@ unsigned int mem_init_done = 0;
 
 void __init mem_init(void)
 {
-	pg_data_t *pgdat;
-
-	high_memory = NULL;
-	for_each_online_pgdat(pgdat)
-		high_memory = max_t(void *, high_memory,
-				    __va(pgdat_end_pfn(pgdat) << PAGE_SHIFT));
-
 	memblock_free_all();
 
 	/* Set this up early, so we can take care of the zero page */
diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
index 6b58da14edc6..81a468a9c223 100644
--- a/arch/sparc/mm/init_32.c
+++ b/arch/sparc/mm/init_32.c
@@ -275,7 +275,6 @@ void __init mem_init(void)
 
 	taint_real_pages();
 
-	high_memory = __va(max_low_pfn << PAGE_SHIFT);
 	memblock_free_all();
 
 	for (i = 0; sp_banks[i].num_bytes != 0; i++) {
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 05882bca5b73..34d46adb9571 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2505,8 +2505,6 @@ static void __init register_page_bootmem_info(void)
 }
 void __init mem_init(void)
 {
-	high_memory = __va(last_valid_pfn << PAGE_SHIFT);
-
 	memblock_free_all();
 
 	/*
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 6414cbf00572..f24a3ce37ab7 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -385,7 +385,6 @@ int __init linux_main(int argc, char **argv, char **envp)
 
 	high_physmem = uml_physmem + physmem_size;
 	end_iomem = high_physmem + iomem_size;
-	high_memory = (void *) end_iomem;
 
 	start_vm = VMALLOC_START;
 
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index cebee310e200..5c9ec876915e 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -972,8 +972,6 @@ void __init setup_arch(char **cmdline_p)
 		max_low_pfn = e820__end_of_low_ram_pfn();
 	else
 		max_low_pfn = max_pfn;
-
-	high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
 #endif
 
 	/* Find and reserve MPTABLE area */
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 6d2f8cb9451e..801b659ead0c 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -643,9 +643,6 @@ void __init initmem_init(void)
 		highstart_pfn = max_low_pfn;
 	printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
 		pages_to_mb(highend_pfn - highstart_pfn));
-	high_memory = (void *) __va(highstart_pfn * PAGE_SIZE - 1) + 1;
-#else
-	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE - 1) + 1;
 #endif
 
 	memblock_set_node(0, PHYS_ADDR_MAX, &memblock.memory, 0);
diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
index 65fda406e6f2..442ef3facff0 100644
--- a/arch/x86/mm/numa_32.c
+++ b/arch/x86/mm/numa_32.c
@@ -41,9 +41,6 @@ void __init initmem_init(void)
 		highstart_pfn = max_low_pfn;
 	printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
 	       pages_to_mb(highend_pfn - highstart_pfn));
-	high_memory = (void *) __va(highstart_pfn * PAGE_SIZE - 1) + 1;
-#else
-	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE - 1) + 1;
 #endif
 	printk(KERN_NOTICE "%ldMB LOWMEM available.\n",
 			pages_to_mb(max_low_pfn));
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index 9f1b0d5fccc7..9b662477b3d4 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -164,8 +164,6 @@ void __init mem_init(void)
 {
 	free_highpages();
 
-	high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT);
-
 	memblock_free_all();
 }
 
diff --git a/mm/memory.c b/mm/memory.c
index 126fdd3001e3..2351f3f6b9ed 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -113,14 +113,6 @@ static __always_inline bool vmf_orig_pte_uffd_wp(struct vm_fault *vmf)
 	return pte_marker_uffd_wp(vmf->orig_pte);
 }
 
-/*
- * A number of key systems in x86 including ioremap() rely on the assumption
- * that high_memory defines the upper bound on direct map memory, then end
- * of ZONE_NORMAL.
- */
-void *high_memory;
-EXPORT_SYMBOL(high_memory);
-
 /*
  * Randomize the address space (stacks, mmaps, brk, etc.).
  *
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 50a93714e1c6..5e5f6ba73757 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -44,6 +44,13 @@ struct page *mem_map;
 EXPORT_SYMBOL(mem_map);
 #endif
 
+/*
+ * high_memory defines the upper bound on direct map memory, then end
+ * of ZONE_NORMAL.
+ */
+void *high_memory;
+EXPORT_SYMBOL(high_memory);
+
 #ifdef CONFIG_DEBUG_MEMORY_INIT
 int __meminitdata mminit_loglevel;
 
@@ -1756,6 +1763,20 @@ static bool arch_has_descending_max_zone_pfns(void)
 	return IS_ENABLED(CONFIG_ARC) && !IS_ENABLED(CONFIG_ARC_HAS_PAE40);
 }
 
+static void set_high_memory(void)
+{
+	phys_addr_t highmem = memblock_end_of_DRAM();
+
+#ifdef CONFIG_HIGHMEM
+	unsigned long pfn = arch_zone_lowest_possible_pfn[ZONE_HIGHMEM];
+
+	if (arch_has_descending_max_zone_pfns() || highmem > PFN_PHYS(pfn))
+		highmem = PFN_PHYS(pfn);
+#endif
+
+	high_memory = phys_to_virt(highmem - 1) + 1;
+}
+
 /**
  * free_area_init - Initialise all pg_data_t and zone data
  * @max_zone_pfn: an array of max PFNs for each zone
@@ -1875,6 +1896,8 @@ void __init free_area_init(unsigned long *max_zone_pfn)
 
 	/* disable hash distribution for systems with a single node */
 	fixup_hashdist();
+
+	set_high_memory();
 }
 
 /**
diff --git a/mm/nommu.c b/mm/nommu.c
index f0209dd26dfa..b9783638fbd4 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -42,8 +42,6 @@
 #include <asm/mmu_context.h>
 #include "internal.h"
 
-void *high_memory;
-EXPORT_SYMBOL(high_memory);
 unsigned long highest_memmap_pfn;
 int sysctl_nr_trim_pages = CONFIG_NOMMU_INITIAL_TRIM_EXCESS;
 int heap_stack_gap = 0;
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 11/13] arch, mm: streamline HIGHMEM freeing
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (9 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 10/13] arch, mm: set high_memory in free_area_init() Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 12/13] arch, mm: introduce arch_mm_preinit Mike Rapoport
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

All architectures that support HIGHMEM have their code that frees high
memory pages to the buddy allocator while __free_memory_core() is limited
to freeing only low memory.

There is no actual reason for that. The memory map is completely ready
by the time memblock_free_all() is called and high pages can be released to
the buddy allocator along with low memory.

Remove low memory limit from __free_memory_core() and drop per-architecture
code that frees high memory pages.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/arc/mm/init.c             |  6 +-----
 arch/arm/mm/init.c             | 29 -----------------------------
 arch/csky/mm/init.c            | 14 --------------
 arch/microblaze/mm/init.c      | 16 ----------------
 arch/mips/mm/init.c            | 20 --------------------
 arch/powerpc/mm/mem.c          | 14 --------------
 arch/sparc/mm/init_32.c        | 25 -------------------------
 arch/x86/include/asm/highmem.h |  3 ---
 arch/x86/include/asm/numa.h    |  4 ----
 arch/x86/include/asm/numa_32.h | 13 -------------
 arch/x86/mm/Makefile           |  2 --
 arch/x86/mm/highmem_32.c       | 34 ----------------------------------
 arch/x86/mm/init_32.c          | 28 ----------------------------
 arch/xtensa/mm/init.c          | 29 -----------------------------
 include/linux/mm.h             |  1 -
 mm/memblock.c                  |  3 +--
 16 files changed, 2 insertions(+), 239 deletions(-)
 delete mode 100644 arch/x86/include/asm/numa_32.h
 delete mode 100644 arch/x86/mm/highmem_32.c

diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
index 05025122e965..11ce638731c9 100644
--- a/arch/arc/mm/init.c
+++ b/arch/arc/mm/init.c
@@ -160,11 +160,7 @@ void __init setup_arch_memory(void)
 static void __init highmem_init(void)
 {
 #ifdef CONFIG_HIGHMEM
-	unsigned long tmp;
-
 	memblock_phys_free(high_mem_start, high_mem_sz);
-	for (tmp = min_high_pfn; tmp < max_high_pfn; tmp++)
-		free_highmem_page(pfn_to_page(tmp));
 #endif
 }
 
@@ -176,8 +172,8 @@ static void __init highmem_init(void)
  */
 void __init mem_init(void)
 {
-	memblock_free_all();
 	highmem_init();
+	memblock_free_all();
 
 	BUILD_BUG_ON((PTRS_PER_PGD * sizeof(pgd_t)) > PAGE_SIZE);
 	BUILD_BUG_ON((PTRS_PER_PUD * sizeof(pud_t)) > PAGE_SIZE);
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index d4bcc745a044..7bb5ce02b9b5 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -237,33 +237,6 @@ static inline void poison_init_mem(void *s, size_t count)
 		*p++ = 0xe7fddef0;
 }
 
-static void __init free_highpages(void)
-{
-#ifdef CONFIG_HIGHMEM
-	unsigned long max_low = max_low_pfn;
-	phys_addr_t range_start, range_end;
-	u64 i;
-
-	/* set highmem page free */
-	for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
-				&range_start, &range_end, NULL) {
-		unsigned long start = PFN_UP(range_start);
-		unsigned long end = PFN_DOWN(range_end);
-
-		/* Ignore complete lowmem entries */
-		if (end <= max_low)
-			continue;
-
-		/* Truncate partial highmem entries */
-		if (start < max_low)
-			start = max_low;
-
-		for (; start < end; start++)
-			free_highmem_page(pfn_to_page(start));
-	}
-#endif
-}
-
 /*
  * mem_init() marks the free areas in the mem_map and tells us how much
  * memory is free.  This is done after various parts of the system have
@@ -283,8 +256,6 @@ void __init mem_init(void)
 	/* this will put all unused low memory onto the freelists */
 	memblock_free_all();
 
-	free_highpages();
-
 	/*
 	 * Check boundaries twice: Some fundamental inconsistencies can
 	 * be detected at build time already.
diff --git a/arch/csky/mm/init.c b/arch/csky/mm/init.c
index a22801aa503a..3914c2b873da 100644
--- a/arch/csky/mm/init.c
+++ b/arch/csky/mm/init.c
@@ -44,21 +44,7 @@ EXPORT_SYMBOL(empty_zero_page);
 
 void __init mem_init(void)
 {
-#ifdef CONFIG_HIGHMEM
-	unsigned long tmp;
-#endif
-
 	memblock_free_all();
-
-#ifdef CONFIG_HIGHMEM
-	for (tmp = highstart_pfn; tmp < highend_pfn; tmp++) {
-		struct page *page = pfn_to_page(tmp);
-
-		/* FIXME not sure about */
-		if (!memblock_is_reserved(tmp << PAGE_SHIFT))
-			free_highmem_page(page);
-	}
-#endif
 }
 
 void free_initmem(void)
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c
index 7e2e342e84c5..3e664e0efc33 100644
--- a/arch/microblaze/mm/init.c
+++ b/arch/microblaze/mm/init.c
@@ -52,19 +52,6 @@ static void __init highmem_init(void)
 	map_page(PKMAP_BASE, 0, 0);	/* XXX gross */
 	pkmap_page_table = virt_to_kpte(PKMAP_BASE);
 }
-
-static void __meminit highmem_setup(void)
-{
-	unsigned long pfn;
-
-	for (pfn = max_low_pfn; pfn < max_pfn; ++pfn) {
-		struct page *page = pfn_to_page(pfn);
-
-		/* FIXME not sure about */
-		if (!memblock_is_reserved(pfn << PAGE_SHIFT))
-			free_highmem_page(page);
-	}
-}
 #endif /* CONFIG_HIGHMEM */
 
 /*
@@ -122,9 +109,6 @@ void __init mem_init(void)
 {
 	/* this will put all memory onto the freelists */
 	memblock_free_all();
-#ifdef CONFIG_HIGHMEM
-	highmem_setup();
-#endif
 
 	mem_init_done = 1;
 }
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 99cefb58fba3..e7882874ba2f 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -427,25 +427,6 @@ void __init paging_init(void)
 static struct kcore_list kcore_kseg0;
 #endif
 
-static inline void __init mem_init_free_highmem(void)
-{
-#ifdef CONFIG_HIGHMEM
-	unsigned long tmp;
-
-	if (cpu_has_dc_aliases)
-		return;
-
-	for (tmp = highstart_pfn; tmp < highend_pfn; tmp++) {
-		struct page *page = pfn_to_page(tmp);
-
-		if (!memblock_is_memory(PFN_PHYS(tmp)))
-			SetPageReserved(page);
-		else
-			free_highmem_page(page);
-	}
-#endif
-}
-
 void __init mem_init(void)
 {
 	/*
@@ -456,7 +437,6 @@ void __init mem_init(void)
 
 	maar_init();
 	setup_zero_pages();	/* Setup zeroed pages.  */
-	mem_init_free_highmem();
 	memblock_free_all();
 
 #ifdef CONFIG_64BIT
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index c7708c8fad29..1bc94bca9944 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -297,20 +297,6 @@ void __init mem_init(void)
 
 	memblock_free_all();
 
-#ifdef CONFIG_HIGHMEM
-	{
-		unsigned long pfn, highmem_mapnr;
-
-		highmem_mapnr = lowmem_end_addr >> PAGE_SHIFT;
-		for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) {
-			phys_addr_t paddr = (phys_addr_t)pfn << PAGE_SHIFT;
-			struct page *page = pfn_to_page(pfn);
-			if (memblock_is_memory(paddr) && !memblock_is_reserved(paddr))
-				free_highmem_page(page);
-		}
-	}
-#endif /* CONFIG_HIGHMEM */
-
 #if defined(CONFIG_PPC_E500) && !defined(CONFIG_SMP)
 	/*
 	 * If smp is enabled, next_tlbcam_idx is initialized in the cpu up
diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
index 81a468a9c223..043e9b6fadd0 100644
--- a/arch/sparc/mm/init_32.c
+++ b/arch/sparc/mm/init_32.c
@@ -232,18 +232,6 @@ static void __init taint_real_pages(void)
 	}
 }
 
-static void map_high_region(unsigned long start_pfn, unsigned long end_pfn)
-{
-	unsigned long tmp;
-
-#ifdef CONFIG_DEBUG_HIGHMEM
-	printk("mapping high region %08lx - %08lx\n", start_pfn, end_pfn);
-#endif
-
-	for (tmp = start_pfn; tmp < end_pfn; tmp++)
-		free_highmem_page(pfn_to_page(tmp));
-}
-
 void __init mem_init(void)
 {
 	int i;
@@ -276,19 +264,6 @@ void __init mem_init(void)
 	taint_real_pages();
 
 	memblock_free_all();
-
-	for (i = 0; sp_banks[i].num_bytes != 0; i++) {
-		unsigned long start_pfn = sp_banks[i].base_addr >> PAGE_SHIFT;
-		unsigned long end_pfn = (sp_banks[i].base_addr + sp_banks[i].num_bytes) >> PAGE_SHIFT;
-
-		if (end_pfn <= highstart_pfn)
-			continue;
-
-		if (start_pfn < highstart_pfn)
-			start_pfn = highstart_pfn;
-
-		map_high_region(start_pfn, end_pfn);
-	}
 }
 
 void sparc_flush_page_to_ram(struct page *page)
diff --git a/arch/x86/include/asm/highmem.h b/arch/x86/include/asm/highmem.h
index 731ee7cc40a5..585bdadba47d 100644
--- a/arch/x86/include/asm/highmem.h
+++ b/arch/x86/include/asm/highmem.h
@@ -69,9 +69,6 @@ extern unsigned long highstart_pfn, highend_pfn;
 		arch_flush_lazy_mmu_mode();		\
 	} while (0)
 
-extern void add_highpages_with_active_regions(int nid, unsigned long start_pfn,
-					unsigned long end_pfn);
-
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_X86_HIGHMEM_H */
diff --git a/arch/x86/include/asm/numa.h b/arch/x86/include/asm/numa.h
index 5469d7a7c40f..53ba39ce010c 100644
--- a/arch/x86/include/asm/numa.h
+++ b/arch/x86/include/asm/numa.h
@@ -41,10 +41,6 @@ static inline int numa_cpu_node(int cpu)
 }
 #endif	/* CONFIG_NUMA */
 
-#ifdef CONFIG_X86_32
-# include <asm/numa_32.h>
-#endif
-
 #ifdef CONFIG_NUMA
 extern void numa_set_node(int cpu, int node);
 extern void numa_clear_node(int cpu);
diff --git a/arch/x86/include/asm/numa_32.h b/arch/x86/include/asm/numa_32.h
deleted file mode 100644
index 9c8e9e85be77..000000000000
--- a/arch/x86/include/asm/numa_32.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _ASM_X86_NUMA_32_H
-#define _ASM_X86_NUMA_32_H
-
-#ifdef CONFIG_HIGHMEM
-extern void set_highmem_pages_init(void);
-#else
-static inline void set_highmem_pages_init(void)
-{
-}
-#endif
-
-#endif /* _ASM_X86_NUMA_32_H */
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index 690fbf48e853..52fbf0a60858 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -42,8 +42,6 @@ obj-$(CONFIG_HUGETLB_PAGE)	+= hugetlbpage.o
 obj-$(CONFIG_PTDUMP_CORE)	+= dump_pagetables.o
 obj-$(CONFIG_PTDUMP_DEBUGFS)	+= debug_pagetables.o
 
-obj-$(CONFIG_HIGHMEM)		+= highmem_32.o
-
 KASAN_SANITIZE_kasan_init_$(BITS).o := n
 obj-$(CONFIG_KASAN)		+= kasan_init_$(BITS).o
 
diff --git a/arch/x86/mm/highmem_32.c b/arch/x86/mm/highmem_32.c
deleted file mode 100644
index d9efa35711ee..000000000000
--- a/arch/x86/mm/highmem_32.c
+++ /dev/null
@@ -1,34 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-#include <linux/highmem.h>
-#include <linux/export.h>
-#include <linux/swap.h> /* for totalram_pages */
-#include <linux/memblock.h>
-#include <asm/numa.h>
-
-void __init set_highmem_pages_init(void)
-{
-	struct zone *zone;
-	int nid;
-
-	/*
-	 * Explicitly reset zone->managed_pages because set_highmem_pages_init()
-	 * is invoked before memblock_free_all()
-	 */
-	reset_all_zones_managed_pages();
-	for_each_zone(zone) {
-		unsigned long zone_start_pfn, zone_end_pfn;
-
-		if (!is_highmem(zone))
-			continue;
-
-		zone_start_pfn = zone->zone_start_pfn;
-		zone_end_pfn = zone_start_pfn + zone->spanned_pages;
-
-		nid = zone_to_nid(zone);
-		printk(KERN_INFO "Initializing %s for node %d (%08lx:%08lx)\n",
-				zone->name, nid, zone_start_pfn, zone_end_pfn);
-
-		add_highpages_with_active_regions(nid, zone_start_pfn,
-				 zone_end_pfn);
-	}
-}
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 801b659ead0c..9ee8ec2bc5d1 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -394,23 +394,6 @@ static void __init permanent_kmaps_init(pgd_t *pgd_base)
 
 	pkmap_page_table = virt_to_kpte(vaddr);
 }
-
-void __init add_highpages_with_active_regions(int nid,
-			 unsigned long start_pfn, unsigned long end_pfn)
-{
-	phys_addr_t start, end;
-	u64 i;
-
-	for_each_free_mem_range(i, nid, MEMBLOCK_NONE, &start, &end, NULL) {
-		unsigned long pfn = clamp_t(unsigned long, PFN_UP(start),
-					    start_pfn, end_pfn);
-		unsigned long e_pfn = clamp_t(unsigned long, PFN_DOWN(end),
-					      start_pfn, end_pfn);
-		for ( ; pfn < e_pfn; pfn++)
-			if (pfn_valid(pfn))
-				free_highmem_page(pfn_to_page(pfn));
-	}
-}
 #else
 static inline void permanent_kmaps_init(pgd_t *pgd_base)
 {
@@ -715,17 +698,6 @@ void __init mem_init(void)
 #ifdef CONFIG_FLATMEM
 	BUG_ON(!mem_map);
 #endif
-	/*
-	 * With CONFIG_DEBUG_PAGEALLOC initialization of highmem pages has to
-	 * be done before memblock_free_all(). Memblock use free low memory for
-	 * temporary data (see find_range_array()) and for this purpose can use
-	 * pages that was already passed to the buddy allocator, hence marked as
-	 * not accessible in the page tables when compiled with
-	 * CONFIG_DEBUG_PAGEALLOC. Otherwise order of initialization is not
-	 * important here.
-	 */
-	set_highmem_pages_init();
-
 	/* this will put all low memory onto the freelists */
 	memblock_free_all();
 
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index 9b662477b3d4..47ecbe28263e 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -129,41 +129,12 @@ void __init zones_init(void)
 	print_vm_layout();
 }
 
-static void __init free_highpages(void)
-{
-#ifdef CONFIG_HIGHMEM
-	unsigned long max_low = max_low_pfn;
-	phys_addr_t range_start, range_end;
-	u64 i;
-
-	/* set highmem page free */
-	for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
-				&range_start, &range_end, NULL) {
-		unsigned long start = PFN_UP(range_start);
-		unsigned long end = PFN_DOWN(range_end);
-
-		/* Ignore complete lowmem entries */
-		if (end <= max_low)
-			continue;
-
-		/* Truncate partial highmem entries */
-		if (start < max_low)
-			start = max_low;
-
-		for (; start < end; start++)
-			free_highmem_page(pfn_to_page(start));
-	}
-#endif
-}
-
 /*
  * Initialize memory pages.
  */
 
 void __init mem_init(void)
 {
-	free_highpages();
-
 	memblock_free_all();
 }
 
diff --git a/include/linux/mm.h b/include/linux/mm.h
index fdf20503850e..6fccd3b3248c 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -3172,7 +3172,6 @@ extern void reserve_bootmem_region(phys_addr_t start,
 
 /* Free the reserved page into the buddy system, so it gets managed. */
 void free_reserved_page(struct page *page);
-#define free_highmem_page(page) free_reserved_page(page)
 
 static inline void mark_page_reserved(struct page *page)
 {
diff --git a/mm/memblock.c b/mm/memblock.c
index 95af35fd1389..64ae678cd1d1 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -2164,8 +2164,7 @@ static unsigned long __init __free_memory_core(phys_addr_t start,
 				 phys_addr_t end)
 {
 	unsigned long start_pfn = PFN_UP(start);
-	unsigned long end_pfn = min_t(unsigned long,
-				      PFN_DOWN(end), max_low_pfn);
+	unsigned long end_pfn = PFN_DOWN(end);
 
 	if (start_pfn >= end_pfn)
 		return 0;
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 12/13] arch, mm: introduce arch_mm_preinit
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (10 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 11/13] arch, mm: streamline HIGHMEM freeing Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 18:51 ` [PATCH 13/13] arch, mm: make releasing of memory to page allocator more explicit Mike Rapoport
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

Currently, implementation of mem_init() in every architecture consists of
one or more of the following:

* initializations that must run before page allocator is active, for
  instance swiotlb_init()
* a call to memblock_free_all() to release all the memory to the buddy
  allocator
* initializations that must run after page allocator is ready and there is
  no arch-specific hook other than mem_init() for that, like for example
  register_page_bootmem_info() in x86 and sparc64 or simple setting of
  mem_init_done = 1 in several architectures
* a bunch of semi-related stuff that apparently had no better place to
  live, for example a ton of BUILD_BUG_ON()s in parisc.

Introduce arch_mm_preinit() that will be the first thing called from
mm_core_init(). On architectures that have initializations that must happen
before the page allocator is ready, move those into arch_mm_preinit() along
with the code that does not depend on ordering with page allocator setup.

On several architectures this results in reduction of mem_init() to a
single call to memblock_free_all() that allows its consolidation next.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/arc/mm/init.c      | 13 ++++++-------
 arch/arm/mm/init.c      | 21 ++++++++++++---------
 arch/arm64/mm/init.c    | 21 ++++++++++++---------
 arch/mips/mm/init.c     | 11 +++++++----
 arch/powerpc/mm/mem.c   |  9 ++++++---
 arch/riscv/mm/init.c    |  8 ++++++--
 arch/s390/mm/init.c     |  5 ++++-
 arch/sparc/mm/init_32.c |  5 ++++-
 arch/um/kernel/mem.c    |  7 +++++--
 arch/x86/mm/init_32.c   |  6 +++++-
 arch/x86/mm/init_64.c   |  5 ++++-
 include/linux/mm.h      |  1 +
 mm/mm_init.c            |  5 +++++
 13 files changed, 77 insertions(+), 40 deletions(-)

diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
index 11ce638731c9..90715b4a0bfa 100644
--- a/arch/arc/mm/init.c
+++ b/arch/arc/mm/init.c
@@ -157,11 +157,16 @@ void __init setup_arch_memory(void)
 	free_area_init(max_zone_pfn);
 }
 
-static void __init highmem_init(void)
+void __init arch_mm_preinit(void)
 {
 #ifdef CONFIG_HIGHMEM
 	memblock_phys_free(high_mem_start, high_mem_sz);
 #endif
+
+	BUILD_BUG_ON((PTRS_PER_PGD * sizeof(pgd_t)) > PAGE_SIZE);
+	BUILD_BUG_ON((PTRS_PER_PUD * sizeof(pud_t)) > PAGE_SIZE);
+	BUILD_BUG_ON((PTRS_PER_PMD * sizeof(pmd_t)) > PAGE_SIZE);
+	BUILD_BUG_ON((PTRS_PER_PTE * sizeof(pte_t)) > PAGE_SIZE);
 }
 
 /*
@@ -172,13 +177,7 @@ static void __init highmem_init(void)
  */
 void __init mem_init(void)
 {
-	highmem_init();
 	memblock_free_all();
-
-	BUILD_BUG_ON((PTRS_PER_PGD * sizeof(pgd_t)) > PAGE_SIZE);
-	BUILD_BUG_ON((PTRS_PER_PUD * sizeof(pud_t)) > PAGE_SIZE);
-	BUILD_BUG_ON((PTRS_PER_PMD * sizeof(pmd_t)) > PAGE_SIZE);
-	BUILD_BUG_ON((PTRS_PER_PTE * sizeof(pte_t)) > PAGE_SIZE);
 }
 
 #ifdef CONFIG_HIGHMEM
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 7bb5ce02b9b5..7222100b0631 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -237,12 +237,7 @@ static inline void poison_init_mem(void *s, size_t count)
 		*p++ = 0xe7fddef0;
 }
 
-/*
- * mem_init() marks the free areas in the mem_map and tells us how much
- * memory is free.  This is done after various parts of the system have
- * claimed their memory after the kernel image.
- */
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 #ifdef CONFIG_ARM_LPAE
 	swiotlb_init(max_pfn > arm_dma_pfn_limit, SWIOTLB_VERBOSE);
@@ -253,9 +248,6 @@ void __init mem_init(void)
 	memblock_phys_free(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET);
 #endif
 
-	/* this will put all unused low memory onto the freelists */
-	memblock_free_all();
-
 	/*
 	 * Check boundaries twice: Some fundamental inconsistencies can
 	 * be detected at build time already.
@@ -271,6 +263,17 @@ void __init mem_init(void)
 #endif
 }
 
+/*
+ * mem_init() marks the free areas in the mem_map and tells us how much
+ * memory is free.  This is done after various parts of the system have
+ * claimed their memory after the kernel image.
+ */
+void __init mem_init(void)
+{
+	/* this will put all unused low memory onto the freelists */
+	memblock_free_all();
+}
+
 #ifdef CONFIG_STRICT_KERNEL_RWX
 struct section_perm {
 	const char *name;
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index a48fcccd67fa..8eff6a6eb11e 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -362,12 +362,7 @@ void __init bootmem_init(void)
 	memblock_dump_all();
 }
 
-/*
- * mem_init() marks the free areas in the mem_map and tells us how much memory
- * is free.  This is done after various parts of the system have claimed their
- * memory after the kernel image.
- */
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	unsigned int flags = SWIOTLB_VERBOSE;
 	bool swiotlb = max_pfn > PFN_DOWN(arm64_dma_phys_limit);
@@ -391,9 +386,6 @@ void __init mem_init(void)
 	swiotlb_init(swiotlb, flags);
 	swiotlb_update_mem_attributes();
 
-	/* this will put all unused low memory onto the freelists */
-	memblock_free_all();
-
 	/*
 	 * Check boundaries twice: Some fundamental inconsistencies can be
 	 * detected at build time already.
@@ -419,6 +411,17 @@ void __init mem_init(void)
 	}
 }
 
+/*
+ * mem_init() marks the free areas in the mem_map and tells us how much memory
+ * is free.  This is done after various parts of the system have claimed their
+ * memory after the kernel image.
+ */
+void __init mem_init(void)
+{
+	/* this will put all unused low memory onto the freelists */
+	memblock_free_all();
+}
+
 void free_initmem(void)
 {
 	void *lm_init_begin = lm_alias(__init_begin);
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index e7882874ba2f..619e2e394392 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -427,7 +427,7 @@ void __init paging_init(void)
 static struct kcore_list kcore_kseg0;
 #endif
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	/*
 	 * When PFN_PTE_SHIFT is greater than PAGE_SHIFT we won't have enough PTE
@@ -437,7 +437,6 @@ void __init mem_init(void)
 
 	maar_init();
 	setup_zero_pages();	/* Setup zeroed pages.  */
-	memblock_free_all();
 
 #ifdef CONFIG_64BIT
 	if ((unsigned long) &_text > (unsigned long) CKSEG0)
@@ -448,13 +447,17 @@ void __init mem_init(void)
 #endif
 }
 #else  /* CONFIG_NUMA */
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	setup_zero_pages();	/* This comes from node 0 */
-	memblock_free_all();
 }
 #endif /* !CONFIG_NUMA */
 
+void __init mem_init(void)
+{
+	memblock_free_all();
+}
+
 void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 {
 	unsigned long pfn;
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 1bc94bca9944..68efdaf14e58 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -273,7 +273,7 @@ void __init paging_init(void)
 	mark_nonram_nosave();
 }
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	/*
 	 * book3s is limited to 16 page sizes due to encoding this in
@@ -295,8 +295,6 @@ void __init mem_init(void)
 
 	kasan_late_init();
 
-	memblock_free_all();
-
 #if defined(CONFIG_PPC_E500) && !defined(CONFIG_SMP)
 	/*
 	 * If smp is enabled, next_tlbcam_idx is initialized in the cpu up
@@ -329,6 +327,11 @@ void __init mem_init(void)
 #endif /* CONFIG_PPC32 */
 }
 
+void __init mem_init(void)
+{
+	memblock_free_all();
+}
+
 void free_initmem(void)
 {
 	ppc_md.progress = ppc_printk_progress;
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index ac6d41e86243..9efadabf6be1 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -171,7 +171,7 @@ static void __init print_vm_layout(void)
 static void print_vm_layout(void) { }
 #endif /* CONFIG_DEBUG_VM */
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	bool swiotlb = max_pfn > PFN_DOWN(dma32_phys_limit);
 #ifdef CONFIG_FLATMEM
@@ -192,11 +192,15 @@ void __init mem_init(void)
 	}
 
 	swiotlb_init(swiotlb, SWIOTLB_VERBOSE);
-	memblock_free_all();
 
 	print_vm_layout();
 }
 
+void __init mem_init(void)
+{
+	memblock_free_all();
+}
+
 /* Limit the memory size via mem. */
 static phys_addr_t memory_limit;
 #ifdef CONFIG_XIP_KERNEL
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index 08ebc9a9344a..6741b38fc864 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -156,7 +156,7 @@ static void pv_init(void)
 	swiotlb_update_mem_attributes();
 }
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	cpumask_set_cpu(0, &init_mm.context.cpu_attach_mask);
 	cpumask_set_cpu(0, mm_cpumask(&init_mm));
@@ -165,7 +165,10 @@ void __init mem_init(void)
 	kfence_split_mapping();
 
 	setup_zero_pages();	/* Setup zeroed pages. */
+}
 
+void __init mem_init(void)
+{
 	/* this will put all low memory onto the freelists */
 	memblock_free_all();
 }
diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
index 043e9b6fadd0..e16c32c5728f 100644
--- a/arch/sparc/mm/init_32.c
+++ b/arch/sparc/mm/init_32.c
@@ -232,7 +232,7 @@ static void __init taint_real_pages(void)
 	}
 }
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	int i;
 
@@ -262,7 +262,10 @@ void __init mem_init(void)
 	memset(sparc_valid_addr_bitmap, 0, i << 2);
 
 	taint_real_pages();
+}
 
+void __init mem_init(void)
+{
 	memblock_free_all();
 }
 
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index befed230aac2..cce387438e60 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -54,7 +54,7 @@ int kmalloc_ok = 0;
 /* Used during early boot */
 static unsigned long brk_end;
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	/* clear the zero-page */
 	memset(empty_zero_page, 0, PAGE_SIZE);
@@ -66,10 +66,13 @@ void __init mem_init(void)
 	map_memory(brk_end, __pa(brk_end), uml_reserved - brk_end, 1, 1, 0);
 	memblock_free((void *)brk_end, uml_reserved - brk_end);
 	uml_reserved = brk_end;
+	max_pfn = max_low_pfn;
+}
 
+void __init mem_init(void)
+{
 	/* this will put all low memory onto the freelists */
 	memblock_free_all();
-	max_pfn = max_low_pfn;
 	kmalloc_ok = 1;
 }
 
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 9ee8ec2bc5d1..16664c5464b5 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -691,13 +691,17 @@ static void __init test_wp_bit(void)
 	panic("Linux doesn't support CPUs with broken WP.");
 }
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	pci_iommu_alloc();
 
 #ifdef CONFIG_FLATMEM
 	BUG_ON(!mem_map);
 #endif
+}
+
+void __init mem_init(void)
+{
 	/* this will put all low memory onto the freelists */
 	memblock_free_all();
 
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 01ea7c6df303..f8981e29633c 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1348,10 +1348,13 @@ static void __init preallocate_vmalloc_pages(void)
 	panic("Failed to pre-allocate %s pages for vmalloc area\n", lvl);
 }
 
-void __init mem_init(void)
+void __init arch_mm_preinit(void)
 {
 	pci_iommu_alloc();
+}
 
+void __init mem_init(void)
+{
 	/* clear_bss() already clear the empty_zero_page */
 
 	/* this will put all memory onto the freelists */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 6fccd3b3248c..ae9cfb9612ea 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -42,6 +42,7 @@ struct folio_batch;
 
 extern int sysctl_page_lock_unfairness;
 
+void arch_mm_preinit(void);
 void mm_core_init(void);
 void init_mm_internals(void);
 
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 5e5f6ba73757..9cca3d497bf8 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -2668,11 +2668,16 @@ static void __init mem_init_print_info(void)
 		);
 }
 
+void __init __weak arch_mm_preinit(void)
+{
+}
+
 /*
  * Set up kernel memory allocators
  */
 void __init mm_core_init(void)
 {
+	arch_mm_preinit();
 	/* Initializations relying on SMP setup */
 	BUILD_BUG_ON(MAX_ZONELISTS > 2);
 	build_all_zonelists(NULL);
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* [PATCH 13/13] arch, mm: make releasing of memory to page allocator more explicit
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (11 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 12/13] arch, mm: introduce arch_mm_preinit Mike Rapoport
@ 2025-03-06 18:51 ` Mike Rapoport
  2025-03-06 19:38 ` [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Dave Hansen
  2025-03-06 21:20 ` Andrew Morton
  14 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-06 18:51 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Mike Rapoport,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>

The point where the memory is released from memblock to the buddy allocator
is hidden inside arch-specific mem_init()s and the call to
memblock_free_all() is needlessly duplicated in every artiste cure and
after introduction of arch_mm_preinit() hook, mem_init() implementation on
many architecture only contains the call to memblock_free_all().

Pull memblock_free_all() call into mm_core_init() and drop mem_init() on
relevant architectures to make it more explicit where the free memory is
released from memblock to the buddy allocator and to reduce code
duplication in architecture specific code.

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/alpha/mm/init.c         |  6 ------
 arch/arc/mm/init.c           | 11 -----------
 arch/arm/mm/init.c           | 11 -----------
 arch/arm64/mm/init.c         | 11 -----------
 arch/csky/mm/init.c          |  5 -----
 arch/hexagon/mm/init.c       | 18 ------------------
 arch/loongarch/kernel/numa.c |  5 -----
 arch/loongarch/mm/init.c     |  5 -----
 arch/m68k/mm/init.c          |  2 --
 arch/microblaze/mm/init.c    |  3 ---
 arch/mips/mm/init.c          |  5 -----
 arch/nios2/mm/init.c         |  6 ------
 arch/openrisc/mm/init.c      |  3 ---
 arch/parisc/mm/init.c        |  2 --
 arch/powerpc/mm/mem.c        |  5 -----
 arch/riscv/mm/init.c         |  5 -----
 arch/s390/mm/init.c          |  6 ------
 arch/sh/mm/init.c            |  2 --
 arch/sparc/mm/init_32.c      |  5 -----
 arch/sparc/mm/init_64.c      |  2 --
 arch/um/kernel/mem.c         |  2 --
 arch/x86/mm/init_32.c        |  3 ---
 arch/x86/mm/init_64.c        |  2 --
 arch/xtensa/mm/init.c        |  9 ---------
 include/linux/memblock.h     |  1 -
 mm/internal.h                |  3 ++-
 mm/mm_init.c                 |  5 +++++
 27 files changed, 7 insertions(+), 136 deletions(-)

diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c
index 3ab2d2f3c917..2d491b8cdab9 100644
--- a/arch/alpha/mm/init.c
+++ b/arch/alpha/mm/init.c
@@ -273,12 +273,6 @@ srm_paging_stop (void)
 }
 #endif
 
-void __init
-mem_init(void)
-{
-	memblock_free_all();
-}
-
 static const pgprot_t protection_map[16] = {
 	[VM_NONE]					= _PAGE_P(_PAGE_FOE | _PAGE_FOW |
 								  _PAGE_FOR),
diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
index 90715b4a0bfa..a73cc94f806e 100644
--- a/arch/arc/mm/init.c
+++ b/arch/arc/mm/init.c
@@ -169,17 +169,6 @@ void __init arch_mm_preinit(void)
 	BUILD_BUG_ON((PTRS_PER_PTE * sizeof(pte_t)) > PAGE_SIZE);
 }
 
-/*
- * mem_init - initializes memory
- *
- * Frees up bootmem
- * Calculates and displays memory available/used
- */
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 #ifdef CONFIG_HIGHMEM
 int pfn_valid(unsigned long pfn)
 {
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 7222100b0631..54bdca025c9f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -263,17 +263,6 @@ void __init arch_mm_preinit(void)
 #endif
 }
 
-/*
- * mem_init() marks the free areas in the mem_map and tells us how much
- * memory is free.  This is done after various parts of the system have
- * claimed their memory after the kernel image.
- */
-void __init mem_init(void)
-{
-	/* this will put all unused low memory onto the freelists */
-	memblock_free_all();
-}
-
 #ifdef CONFIG_STRICT_KERNEL_RWX
 struct section_perm {
 	const char *name;
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index 8eff6a6eb11e..510695107233 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -411,17 +411,6 @@ void __init arch_mm_preinit(void)
 	}
 }
 
-/*
- * mem_init() marks the free areas in the mem_map and tells us how much memory
- * is free.  This is done after various parts of the system have claimed their
- * memory after the kernel image.
- */
-void __init mem_init(void)
-{
-	/* this will put all unused low memory onto the freelists */
-	memblock_free_all();
-}
-
 void free_initmem(void)
 {
 	void *lm_init_begin = lm_alias(__init_begin);
diff --git a/arch/csky/mm/init.c b/arch/csky/mm/init.c
index 3914c2b873da..573da66b2543 100644
--- a/arch/csky/mm/init.c
+++ b/arch/csky/mm/init.c
@@ -42,11 +42,6 @@ unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]
 						__page_aligned_bss;
 EXPORT_SYMBOL(empty_zero_page);
 
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 void free_initmem(void)
 {
 	free_initmem_default(-1);
diff --git a/arch/hexagon/mm/init.c b/arch/hexagon/mm/init.c
index d412c2314509..34eb9d424b96 100644
--- a/arch/hexagon/mm/init.c
+++ b/arch/hexagon/mm/init.c
@@ -43,24 +43,6 @@ DEFINE_SPINLOCK(kmap_gen_lock);
 /*  checkpatch says don't init this to 0.  */
 unsigned long long kmap_generation;
 
-/*
- * mem_init - initializes memory
- *
- * Frees up bootmem
- * Fixes up more stuff for HIGHMEM
- * Calculates and displays memory available/used
- */
-void __init mem_init(void)
-{
-	/*  No idea where this is actually declared.  Seems to evade LXR.  */
-	memblock_free_all();
-
-	/*
-	 *  To-Do:  someone somewhere should wipe out the bootmem map
-	 *  after we're done?
-	 */
-}
-
 void sync_icache_dcache(pte_t pte)
 {
 	unsigned long addr;
diff --git a/arch/loongarch/kernel/numa.c b/arch/loongarch/kernel/numa.c
index 8eb489725b1a..30a72fd528c0 100644
--- a/arch/loongarch/kernel/numa.c
+++ b/arch/loongarch/kernel/numa.c
@@ -387,11 +387,6 @@ void __init paging_init(void)
 	free_area_init(zones_size);
 }
 
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 int pcibus_to_node(struct pci_bus *bus)
 {
 	return dev_to_node(&bus->dev);
diff --git a/arch/loongarch/mm/init.c b/arch/loongarch/mm/init.c
index 6affa3609188..fdb7f73ad160 100644
--- a/arch/loongarch/mm/init.c
+++ b/arch/loongarch/mm/init.c
@@ -75,11 +75,6 @@ void __init paging_init(void)
 
 	free_area_init(max_zone_pfns);
 }
-
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
 #endif /* !CONFIG_NUMA */
 
 void __ref free_initmem(void)
diff --git a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c
index e03ac556c59e..3d9aa9cce144 100644
--- a/arch/m68k/mm/init.c
+++ b/arch/m68k/mm/init.c
@@ -119,7 +119,5 @@ static inline void init_pointer_tables(void)
 
 void __init mem_init(void)
 {
-	/* this will put all memory onto the freelists */
-	memblock_free_all();
 	init_pointer_tables();
 }
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c
index 3e664e0efc33..65f0d1fb8a2a 100644
--- a/arch/microblaze/mm/init.c
+++ b/arch/microblaze/mm/init.c
@@ -107,9 +107,6 @@ void __init setup_memory(void)
 
 void __init mem_init(void)
 {
-	/* this will put all memory onto the freelists */
-	memblock_free_all();
-
 	mem_init_done = 1;
 }
 
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 619e2e394392..6ea27bbd387e 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -453,11 +453,6 @@ void __init arch_mm_preinit(void)
 }
 #endif /* !CONFIG_NUMA */
 
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 void free_init_pages(const char *what, unsigned long begin, unsigned long end)
 {
 	unsigned long pfn;
diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index 4ba8dfa0d238..94efa3de3933 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -60,12 +60,6 @@ void __init paging_init(void)
 			(unsigned long)empty_zero_page + PAGE_SIZE);
 }
 
-void __init mem_init(void)
-{
-	/* this will put all memory onto the freelists */
-	memblock_free_all();
-}
-
 void __init mmu_init(void)
 {
 	flush_tlb_all();
diff --git a/arch/openrisc/mm/init.c b/arch/openrisc/mm/init.c
index 72c5952607ac..be1c2eb8bb94 100644
--- a/arch/openrisc/mm/init.c
+++ b/arch/openrisc/mm/init.c
@@ -196,9 +196,6 @@ void __init mem_init(void)
 	/* clear the zero-page */
 	memset((void *)empty_zero_page, 0, PAGE_SIZE);
 
-	/* this will put all low memory onto the freelists */
-	memblock_free_all();
-
 	printk("mem_init_done ...........................................\n");
 	mem_init_done = 1;
 	return;
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
index 4fbe354dc9b4..14270715d754 100644
--- a/arch/parisc/mm/init.c
+++ b/arch/parisc/mm/init.c
@@ -562,8 +562,6 @@ void __init mem_init(void)
 	BUILD_BUG_ON(TMPALIAS_MAP_START >= 0x80000000);
 #endif
 
-	memblock_free_all();
-
 #ifdef CONFIG_PA11
 	if (boot_cpu_data.cpu_type == pcxl2 || boot_cpu_data.cpu_type == pcxl) {
 		pcxl_dma_start = (unsigned long)SET_MAP_OFFSET(MAP_START);
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 68efdaf14e58..d8fe11b64259 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -327,11 +327,6 @@ void __init arch_mm_preinit(void)
 #endif /* CONFIG_PPC32 */
 }
 
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 void free_initmem(void)
 {
 	ppc_md.progress = ppc_printk_progress;
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 9efadabf6be1..79b649f6de72 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -196,11 +196,6 @@ void __init arch_mm_preinit(void)
 	print_vm_layout();
 }
 
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 /* Limit the memory size via mem. */
 static phys_addr_t memory_limit;
 #ifdef CONFIG_XIP_KERNEL
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index 6741b38fc864..e8585011fbfc 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -167,12 +167,6 @@ void __init arch_mm_preinit(void)
 	setup_zero_pages();	/* Setup zeroed pages. */
 }
 
-void __init mem_init(void)
-{
-	/* this will put all low memory onto the freelists */
-	memblock_free_all();
-}
-
 unsigned long memory_block_size_bytes(void)
 {
 	/*
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
index 6d459ffba4bc..99e302eeeec1 100644
--- a/arch/sh/mm/init.c
+++ b/arch/sh/mm/init.c
@@ -330,8 +330,6 @@ unsigned int mem_init_done = 0;
 
 void __init mem_init(void)
 {
-	memblock_free_all();
-
 	/* Set this up early, so we can take care of the zero page */
 	cpu_cache_init();
 
diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
index e16c32c5728f..fdc93dd12c3e 100644
--- a/arch/sparc/mm/init_32.c
+++ b/arch/sparc/mm/init_32.c
@@ -264,11 +264,6 @@ void __init arch_mm_preinit(void)
 	taint_real_pages();
 }
 
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 void sparc_flush_page_to_ram(struct page *page)
 {
 	unsigned long vaddr = (unsigned long)page_address(page);
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 34d46adb9571..760818950464 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2505,8 +2505,6 @@ static void __init register_page_bootmem_info(void)
 }
 void __init mem_init(void)
 {
-	memblock_free_all();
-
 	/*
 	 * Must be done after boot memory is put on freelist, because here we
 	 * might set fields in deferred struct pages that have not yet been
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index cce387438e60..379f33a1babf 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -71,8 +71,6 @@ void __init arch_mm_preinit(void)
 
 void __init mem_init(void)
 {
-	/* this will put all low memory onto the freelists */
-	memblock_free_all();
 	kmalloc_ok = 1;
 }
 
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 16664c5464b5..95b2758b4e4d 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -702,9 +702,6 @@ void __init arch_mm_preinit(void)
 
 void __init mem_init(void)
 {
-	/* this will put all low memory onto the freelists */
-	memblock_free_all();
-
 	after_bootmem = 1;
 	x86_init.hyper.init_after_bootmem();
 
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index f8981e29633c..451e796427d3 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1357,8 +1357,6 @@ void __init mem_init(void)
 {
 	/* clear_bss() already clear the empty_zero_page */
 
-	/* this will put all memory onto the freelists */
-	memblock_free_all();
 	after_bootmem = 1;
 	x86_init.hyper.init_after_bootmem();
 
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index 47ecbe28263e..cc52733a0649 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -129,15 +129,6 @@ void __init zones_init(void)
 	print_vm_layout();
 }
 
-/*
- * Initialize memory pages.
- */
-
-void __init mem_init(void)
-{
-	memblock_free_all();
-}
-
 static void __init parse_memmap_one(char *p)
 {
 	char *oldp;
diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index e79eb6ac516f..ef5a1ecc6e59 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -133,7 +133,6 @@ int memblock_mark_nomap(phys_addr_t base, phys_addr_t size);
 int memblock_clear_nomap(phys_addr_t base, phys_addr_t size);
 int memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t size);
 
-void memblock_free_all(void);
 void memblock_free(void *ptr, size_t size);
 void reset_all_zones_managed_pages(void);
 
diff --git a/mm/internal.h b/mm/internal.h
index 109ef30fee11..26e2e8cea495 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -1407,7 +1407,8 @@ static inline bool gup_must_unshare(struct vm_area_struct *vma,
 }
 
 extern bool mirrored_kernelcore;
-extern bool memblock_has_mirror(void);
+bool memblock_has_mirror(void);
+void memblock_free_all(void);
 
 static __always_inline void vma_set_range(struct vm_area_struct *vma,
 					  unsigned long start, unsigned long end,
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 9cca3d497bf8..545e11f1a3ba 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -2672,6 +2672,10 @@ void __init __weak arch_mm_preinit(void)
 {
 }
 
+void __init __weak mem_init(void)
+{
+}
+
 /*
  * Set up kernel memory allocators
  */
@@ -2693,6 +2697,7 @@ void __init mm_core_init(void)
 	report_meminit();
 	kmsan_init_shadow();
 	stack_depot_early_init();
+	memblock_free_all();
 	mem_init();
 	kmem_cache_init();
 	/*
-- 
2.47.2


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 00/13] arch, mm: reduce code duplication in mem_init()
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (12 preceding siblings ...)
  2025-03-06 18:51 ` [PATCH 13/13] arch, mm: make releasing of memory to page allocator more explicit Mike Rapoport
@ 2025-03-06 19:38 ` Dave Hansen
  2025-03-06 21:20 ` Andrew Morton
  14 siblings, 0 replies; 31+ messages in thread
From: Dave Hansen @ 2025-03-06 19:38 UTC (permalink / raw)
  To: Mike Rapoport, Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On 3/6/25 10:51, Mike Rapoport wrote:
>  53 files changed, 151 insertions(+), 618 deletions(-)
>  delete mode 100644 arch/x86/include/asm/numa_32.h
>  delete mode 100644 arch/x86/mm/highmem_32.c

Holy cow, nice work. For the x86 bits:

Acked-by: Dave Hansen <dave.hansen@linux.intel.com>


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 00/13] arch, mm: reduce code duplication in mem_init()
  2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
                   ` (13 preceding siblings ...)
  2025-03-06 19:38 ` [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Dave Hansen
@ 2025-03-06 21:20 ` Andrew Morton
  14 siblings, 0 replies; 31+ messages in thread
From: Andrew Morton @ 2025-03-06 21:20 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On Thu,  6 Mar 2025 20:51:10 +0200 Mike Rapoport <rppt@kernel.org> wrote:

> Every architecture has implementation of mem_init() function and some
> even more than one. All these release free memory to the buddy
> allocator, most of them set high_memory to the end of directly
> addressable memory and many of them set max_mapnr for FLATMEM case.
> 
> These patches pull the commonalities into the generic code and refactor
> some of the mem_init() implementations so that many of them can be just
> dropped.

Thanks, I added this series to mm.git.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 07/13] s390: make setup_zero_pages() use memblock
  2025-03-06 18:51 ` [PATCH 07/13] s390: make setup_zero_pages() use memblock Mike Rapoport
@ 2025-03-07 15:28   ` Heiko Carstens
  2025-03-11  5:55     ` Mike Rapoport
  0 siblings, 1 reply; 31+ messages in thread
From: Heiko Carstens @ 2025-03-07 15:28 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On Thu, Mar 06, 2025 at 08:51:17PM +0200, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> 
> Allocating the zero pages from memblock is simpler because the memory is
> already reserved.
> 
> This will also help with pulling out memblock_free_all() to the generic
> code and reducing code duplication in arch::mem_init().
> 
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> ---
>  arch/s390/mm/init.c | 14 +++-----------
>  1 file changed, 3 insertions(+), 11 deletions(-)

Acked-by: Heiko Carstens <hca@linux.ibm.com>

> -	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
> +	empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
>  	if (!empty_zero_page)
>  		panic("Out of memory in setup_zero_pages");

This could have been converted to memblock_alloc_or_panic(), but I
guess this can also be done at a later point in time.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 02/13] csky: move setup_initrd() to setup.c
  2025-03-06 18:51 ` [PATCH 02/13] csky: move setup_initrd() to setup.c Mike Rapoport
@ 2025-03-10  0:43   ` Guo Ren
  0 siblings, 0 replies; 31+ messages in thread
From: Guo Ren @ 2025-03-10  0:43 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

Move setup_initrd from mem_init into memblock_init, that LGTM.

Acked by: Guo Ren (csky) <guoren@kernel.org>

On Fri, Mar 7, 2025 at 2:52 AM Mike Rapoport <rppt@kernel.org> wrote:
>
> From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
>
> Memory used by initrd should be reserved as soon as possible before
> there any memblock allocations that might overwrite that memory.
>
> This will also help with pulling out memblock_free_all() to the generic
> code and reducing code duplication in arch::mem_init().
>
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> ---
>  arch/csky/kernel/setup.c | 43 ++++++++++++++++++++++++++++++++++++++++
>  arch/csky/mm/init.c      | 43 ----------------------------------------
>  2 files changed, 43 insertions(+), 43 deletions(-)
>
> diff --git a/arch/csky/kernel/setup.c b/arch/csky/kernel/setup.c
> index fe715b707fd0..e0d6ca86ea8c 100644
> --- a/arch/csky/kernel/setup.c
> +++ b/arch/csky/kernel/setup.c
> @@ -12,6 +12,45 @@
>  #include <asm/mmu_context.h>
>  #include <asm/pgalloc.h>
>
> +#ifdef CONFIG_BLK_DEV_INITRD
> +static void __init setup_initrd(void)
> +{
> +       unsigned long size;
> +
> +       if (initrd_start >= initrd_end) {
> +               pr_err("initrd not found or empty");
> +               goto disable;
> +       }
> +
> +       if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
> +               pr_err("initrd extends beyond end of memory");
> +               goto disable;
> +       }
> +
> +       size = initrd_end - initrd_start;
> +
> +       if (memblock_is_region_reserved(__pa(initrd_start), size)) {
> +               pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region",
> +                      __pa(initrd_start), size);
> +               goto disable;
> +       }
> +
> +       memblock_reserve(__pa(initrd_start), size);
> +
> +       pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n",
> +               (void *)(initrd_start), size);
> +
> +       initrd_below_start_ok = 1;
> +
> +       return;
> +
> +disable:
> +       initrd_start = initrd_end = 0;
> +
> +       pr_err(" - disabling initrd\n");
> +}
> +#endif
> +
>  static void __init csky_memblock_init(void)
>  {
>         unsigned long lowmem_size = PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
> @@ -40,6 +79,10 @@ static void __init csky_memblock_init(void)
>                 max_low_pfn = min_low_pfn + sseg_size;
>         }
>
> +#ifdef CONFIG_BLK_DEV_INITRD
> +       setup_initrd();
> +#endif
> +
>         max_zone_pfn[ZONE_NORMAL] = max_low_pfn;
>
>         mmu_init(min_low_pfn, max_low_pfn);
> diff --git a/arch/csky/mm/init.c b/arch/csky/mm/init.c
> index bde7cabd23df..ab51acbc19b2 100644
> --- a/arch/csky/mm/init.c
> +++ b/arch/csky/mm/init.c
> @@ -42,45 +42,6 @@ unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]
>                                                 __page_aligned_bss;
>  EXPORT_SYMBOL(empty_zero_page);
>
> -#ifdef CONFIG_BLK_DEV_INITRD
> -static void __init setup_initrd(void)
> -{
> -       unsigned long size;
> -
> -       if (initrd_start >= initrd_end) {
> -               pr_err("initrd not found or empty");
> -               goto disable;
> -       }
> -
> -       if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
> -               pr_err("initrd extends beyond end of memory");
> -               goto disable;
> -       }
> -
> -       size = initrd_end - initrd_start;
> -
> -       if (memblock_is_region_reserved(__pa(initrd_start), size)) {
> -               pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region",
> -                      __pa(initrd_start), size);
> -               goto disable;
> -       }
> -
> -       memblock_reserve(__pa(initrd_start), size);
> -
> -       pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n",
> -               (void *)(initrd_start), size);
> -
> -       initrd_below_start_ok = 1;
> -
> -       return;
> -
> -disable:
> -       initrd_start = initrd_end = 0;
> -
> -       pr_err(" - disabling initrd\n");
> -}
> -#endif
> -
>  void __init mem_init(void)
>  {
>  #ifdef CONFIG_HIGHMEM
> @@ -92,10 +53,6 @@ void __init mem_init(void)
>  #endif
>         high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
>
> -#ifdef CONFIG_BLK_DEV_INITRD
> -       setup_initrd();
> -#endif
> -
>         memblock_free_all();
>
>  #ifdef CONFIG_HIGHMEM
> --
> 2.47.2
>


-- 
Best Regards
 Guo Ren

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 07/13] s390: make setup_zero_pages() use memblock
  2025-03-07 15:28   ` Heiko Carstens
@ 2025-03-11  5:55     ` Mike Rapoport
  2025-03-12 15:56       ` Ard Biesheuvel
  0 siblings, 1 reply; 31+ messages in thread
From: Mike Rapoport @ 2025-03-11  5:55 UTC (permalink / raw)
  To: Heiko Carstens
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On Fri, Mar 07, 2025 at 04:28:15PM +0100, Heiko Carstens wrote:
> On Thu, Mar 06, 2025 at 08:51:17PM +0200, Mike Rapoport wrote:
> > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > 
> > Allocating the zero pages from memblock is simpler because the memory is
> > already reserved.
> > 
> > This will also help with pulling out memblock_free_all() to the generic
> > code and reducing code duplication in arch::mem_init().
> > 
> > Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> > ---
> >  arch/s390/mm/init.c | 14 +++-----------
> >  1 file changed, 3 insertions(+), 11 deletions(-)
> 
> Acked-by: Heiko Carstens <hca@linux.ibm.com>
> 
> > -	empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
> > +	empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
> >  	if (!empty_zero_page)
> >  		panic("Out of memory in setup_zero_pages");
> 
> This could have been converted to memblock_alloc_or_panic(), but I
> guess this can also be done at a later point in time.

Duh, I should have remembered about memblock_alloc_or_panic() :)

@Andrew, can you please pick this as a fixup?

From 344fec8519e5152c25809c9277b54a68f9cde0e9 Mon Sep 17 00:00:00 2001
From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
Date: Tue, 11 Mar 2025 07:51:27 +0200
Subject: [PATCH] s390: use memblock_alloc_or_panic() in setup_zero_page()

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/s390/mm/init.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index ab8ece3c41f1..c6a97329d7e7 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -81,9 +81,7 @@ static void __init setup_zero_pages(void)
 	while (order > 2 && (total_pages >> 10) < (1UL << order))
 		order--;
 
-	empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
-	if (!empty_zero_page)
-		panic("Out of memory in setup_zero_pages");
+	empty_zero_page = (unsigned long)memblock_alloc_or_panic(PAGE_SIZE << order, order);
 
 	zero_page_mask = ((PAGE_SIZE << order) - 1) & PAGE_MASK;
 }
-- 
2.47.2


-- 
Sincerely yours,
Mike.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 05/13] MIPS: make setup_zero_pages() use memblock
  2025-03-06 18:51 ` [PATCH 05/13] MIPS: make setup_zero_pages() use memblock Mike Rapoport
@ 2025-03-11  5:57   ` Mike Rapoport
  0 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-11  5:57 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alexander Gordeev, Andreas Larsson, Andy Lutomirski,
	Arnd Bergmann, Borislav Petkov, Brian Cain, Catalin Marinas,
	Dave Hansen, David S. Miller, Dinh Nguyen, Geert Uytterhoeven,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On Thu, Mar 06, 2025 at 08:51:15PM +0200, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> 
> Allocating the zero pages from memblock is simpler because the memory is
> already reserved.
> 
> This will also help with pulling out memblock_free_all() to the generic
> code and reducing code duplication in arch::mem_init().
> 
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> ---
>  arch/mips/include/asm/mmzone.h |  2 --
>  arch/mips/mm/init.c            | 16 +++++-----------
>  2 files changed, 5 insertions(+), 13 deletions(-)
 
Andrew can you please pick this as a fixup?

From 148713d17cbdf7a3ad08f18ba203185b70c0e7c2 Mon Sep 17 00:00:00 2001
From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
Date: Tue, 11 Mar 2025 07:51:27 +0200
Subject: [PATCH] MIPS: use memblock_alloc_or_panic() in setup_zero_page()

Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
---
 arch/mips/mm/init.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 6ea27bbd387e..a673d3d68254 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -68,9 +68,7 @@ static void __init setup_zero_pages(void)
 	else
 		order = 0;
 
-	empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, PAGE_SIZE);
-	if (!empty_zero_page)
-		panic("Oh boy, that early out of memory?");
+	empty_zero_page = (unsigned long)memblock_alloc_or_panic(PAGE_SIZE << order, PAGE_SIZE);
 
 	zero_page_mask = ((PAGE_SIZE << order) - 1) & PAGE_MASK;
 }
-- 
2.47.2

-- 
Sincerely yours,
Mike.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-06 18:51 ` [PATCH 10/13] arch, mm: set high_memory in free_area_init() Mike Rapoport
@ 2025-03-11 17:51   ` Mark Brown
  2025-03-11 21:06     ` Mike Rapoport
  2025-03-11 21:59     ` Russell King (Oracle)
  0 siblings, 2 replies; 31+ messages in thread
From: Mark Brown @ 2025-03-11 17:51 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86


[-- Attachment #1.1: Type: text/plain, Size: 86170 bytes --]

On Thu, Mar 06, 2025 at 08:51:20PM +0200, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> 
> high_memory defines upper bound on the directly mapped memory.
> This bound is defined by the beginning of ZONE_HIGHMEM when a system has
> high memory and by the end of memory otherwise.
> 
> All this is known to generic memory management initialization code that
> can set high_memory while initializing core mm structures.
> 
> Remove per-architecture calculation of high_memory and add a generic
> version to free_area_init().

This patch appears to be causing breakage on a number of 32 bit arm
platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
die on boot with no output, a bisect with qemu points at this commit and
those for physical platforms appear to be converging on the same place.

Bisect log:

# bad: [eea255893718268e1ab852fb52f70c613d109b99] Add linux-next specific files for 20250311
# good: [97654dc13f139ea726042711a4943f424c5d5b83] Merge branch 'for-linux-next-fixes' of https://gitlab.freedesktop.org/drm/misc/kernel.git
# good: [5cd09a324588b4554c9ed89cef34fa502a097d16] fs/proc/task_mmu: reduce scope of lazy mmu region
# good: [8a7e7a03e3c53cd9abbbf233899cc2e05b2c6ec0] ASoC: SOF: Intel: Add support for ACE3+ mic privacy
# good: [1ec3f1dc215d4b3d3679ecdc4a549d4e82b3a609] ASoC: dmic: add regulator support
# good: [69823334200029767de785d30acf74e4872a11d3] ASoC: SOF: Intel: mtl: Split up dsp_ops setup code
# good: [db91ad81a2545eb82aa47d0306bc3e1adb05e336] ASoC: dt-bindings: fsl,imx-asrc: Document audio graph port
# good: [a8fed0bddf8fa239fc71dc5c035d2e078c597369] ASoC: dt-bindings: add regulator support to dmic codec
# good: [0d2d276f53ea3ba1686619cde503d9748f58a834] ASoC: SOF: Intel: lnl/ptl: Only set dsp_ops which differs from MTL
# good: [8aeb7d2c3fc315e629d252cd601598a5af74bbb0] ASoC: SOF: Intel: Create ptl.c as placeholder for Panther Lake features
# good: [4a43c3241ec3465a501825ecaf051e5a1d85a60b] ASoC: SOF: Intel: ptl: Add support for mic privacy
# good: [80416226920c21e806f93bd0930d67557f41600f] ASoC: SOF: Intel: mtl: Stop exporting dsp_ops callback functions
# good: [d3321a20b5111a66f3e68798959a347acfccbd44] ASoC: dmic: add regulator support
# good: [eea84a7f0cdb693c261a7cf84bd4b3d81479c9a6] ASoC: SOF: ipc4: Add support for Intel HW managed mic privacy messaging
# good: [0978e8207b61ac6d51280e5d28ccfff75d653363] ASoC: SOF: Intel: hda-mlink: Add support for mic privacy in VS SHIM registers
# good: [a0db661e7d8e084e9cf3b9cdca7c6e4e66f2e849] ASoC: SOF: hda/shim: Add callbacks to handle mic privacy change for sdw
# good: [02a838b01b8e7c00e2efe78db06fff356a112dec] spi: dt-bindings: fsl-lpspi: Add i.MX94 support
# good: [5d5eceb9bb1050774dadc6919a258729f276fd00] ASoC: soc-dai: add snd_soc_dai_mute_is_ctrled_at_trigger()
# good: [3707fd9c383fc7ae19733a3ad2e5a82bf86370a0] spi: stm32: Remove unnecessary print function dev_err()
# good: [7a2ff0510c51462c0a979f5006d375a2b23d46e9] ASoC: soc-pcm: reuse dpcm_state_string()
# good: [269b844239149a9bbaba66518db99ebb06554a15] ASoC: dapm: Fix changes to DECLARE_ADAU17X1_DSP_MUX_CTRL
# good: [7dfc9bdde9fa20cf1ac5cbea97b0446622ca74c7] spi: stm32-ospi: Fix an IS_ERR() vs NULL bug in stm32_ospi_get_resources()
# good: [2c2eadd07e747059ccd65e68cd1d1b23ca96b072] ASoC: cs42l43: convert to SYSTEM_SLEEP_PM_OPS
# good: [c6141ba0110f98266106699aca071fed025c3d64] ASoC: Merge up fixes
# good: [a1462fb8b5dd1018e3477a6861822d75c6a59449] ASoC: Intel: boards: updates for 6.15
# good: [1ff07522690d2c2b67343099d2d046e88f71cddb] ASoC: Intel: soc-acpi-intel-lnl-match: add cs42l43 6x cs35l56 support
# good: [ffe450cb6bce16eb15f6bf90b85b7e5f9bfbc1e3] ASoC: Intel: soc-acpi-intel-ptl-match: add rt713_vb_l3_rt1320_l12 support
# good: [65e246d33dede0008f281d3d09b7695bef2d18eb] ASoC: sdw_utils: add mic and amp dais to 0xaaaa codec
# good: [c7a6a74f847923bb726029b85a3fd0e05e9fbb04] ASoC: Intel: soc-acpi-intel-ptl-match: add sdw multi function mockup codec
# good: [02467341e3577836648753a9e9a5c196f08187da] ASoC: Intel: soc-acpi-intel-ptl-match: add rt712_vb_l3_rt1320_l2 support
# good: [438405704eec45c06be9adc94eb5f94855412790] ASoC: Intel: soc-acpi-intel-lnl-match: add sdw multi function mockup codec
# good: [8b36447c9ae102539d82d6278971b23b20d87629] ASoC: Intel: adl: add 2xrt1316 audio configuration
# good: [e1a0657c6d943528ef58671594ca7e5b17db5394] ASoC: Intel: add multi-function SDW mockup codec match
# good: [7172d9ae29afd00c8ee9a8e3a4eba4cea5d5e403] ASoC: Intel: soc-acpi-intel-ptl-match: add cs42l43 6x cs35l56 support
# good: [b92bc4d6e21f1802a39975e3c7cc4f76f591d46f] ASoC: soc-pcm: merge soc_pcm_hw_update_format/subformat()
# good: [de22dc76e11d1291d4f50b73dbbaa158ba9d6acd] ASoC: doc: use SND_SOC_DAILINK_xxx() macro
# good: [6db63090272768785e6bb4a3afa16650c1e96c54] ASoC: Tidy up SOC_DOUBLE_* and SOC_SINGLE_* helpers
# good: [426aae69373fb149e5bbe1d5fa18299d38414f22] ASoC: fsl_audmix: support audio graph card for audmix
# good: [ee3cce59b1cecad7edd2022a443c8607faa9a4ad] ASoC: use inclusive language for
# good: [2cb6290a24f74f1c4a1b4cbd311ddd50a2c6046a] Tidy up ASoC VALUE control macros
# good: [d6c08418955a7d88bd5fe18787456264c4408e22] ASoC: samsung: GPIO descriptor conversion
# good: [24056de9976dfc33801d2574c1672d91f840277a] ASoC: codecs: Update device_id tables for Realtek
# good: [56e8bbb7a0d1b15a1af87fc7d6a73469f6ed4bd2] ASoC: audio-graph-card2-custom-sample: Separate Sample
# good: [0a22454ab2eca530702b2689858909b608953703] ASoC: samsung: tm2_wm5110: Drop unused include
# good: [5fac6c2785f95ddd73db33289dcd3cd5a68be226] Add STM32MP25 SPI NOR support
# good: [c095b7a27529d1d18b3b36a47f77a1419f0de939] ASoC: samsung: tobermory: Drop unused include
# good: [5c06f7f3d8374df1cec3b353306a4d1032a60f44] ASoC: samsung: lowland: Drop unused include
# good: [b19d340d5d08c5940ce612c2a1b5fe3a8a401f9d] ASoC: samsung: bells: Drop unused include
# good: [1d251a7adc5b720a71641c758a45b8a119971d80] ASoC: dt-bindings: everest,es8328: Mark ES8388 compatible with ES8328
# good: [8243a49145e59f19032b86b20d8906f05e31bdcc] ASoC: dt-bindings: everest,es8328: Require reg property
# good: [79c080c75cdd0a5ba38be039f6f9bb66ec53b0c4] ASoC: mediatek: mt6359: Fix DT parse error due to wrong child node name
# good: [da9146c19b1774926148ff271c4a3dc8d7891b18] ASoC: samsung: speyside: Convert to GPIO descriptor
# good: [c4b2d9643a06a5326a778c4d77d6fa60e0f3d6b1] ASoC: samsung: littlemill: Drop unused include
# good: [516493232a9b80dd4f4f6b078541cfad00973dbb] ASoC: wm9713: Use SOC_DOUBLE_EXT() helper macro
# good: [bf19467b8512f855bdfae59ae78d326b1f434443] ASoC: wm9712: Use SOC_SINGLE_EXT() helper macro
# good: [c951b20766f019a263b3547b07627be52fff87b4] ASoC: dapm: Use ASoC control macros where possible
# good: [7c5b07b497eab8eba75cf5da00cba493216dfc12] ASoC: atmel: tse850-pcm5142: Use SOC_SINGLE_EXT() helper macro
# good: [aecdaa84adafb086b5b2939898d781bd63d6fe2e] ASoC: tas2562: Use SOC_SINGLE_EXT_TLV() helper macro
# good: [b2b6913394488e031ee3d726f247b1c967057b40] ASoC: rt715: Remove duplicate SOC_DOUBLE_R_EXT() helper macro
# good: [1743dbb45b2cbe5500068900794a355a7e0dd853] ASoC: Tidy up SOC_DOUBLE_R_* helpers
# good: [98413be56faa1c12494f43e7f77746763fa41c4a] ASoC: wsa881x: Use SOC_SINGLE_EXT_TLV() helper macro
# good: [9e6e7e088cb78ce58ea442106b1f29cd7b6ff76e] ASoC: dapm: Add missing SOC_DAPM_DOUBLE_R_TLV() helper
# good: [9bb7d7452363fc470b76766b0a6356807e752795] ASoC: wcd938x: Use SOC_SINGLE_EXT_TLV() helper macro
# good: [17ec58ac3c08c5c43bbdf5b08020fa4188a3009a] ASoC: sma1307: Use SOC_SINGLE_EXT() helper macro
# good: [c01a74844b74c584160d5253f794bbd2af015bec] ASoC: Remove unused helper macro
# good: [e33d0569d7a1d041e37fb93094e70807856531c2] ASoC: mediatek: mt8183-mt6358-ts3a227-max98357: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [836d2924c05edb06e32eeede8bc12c4c96da0b3d] ASoC: intel: rt274: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [d8c808af2a9bf731f72fcb772cf22886c6d00d99] ASoC: mediatek: mt7986-dai-etdm: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1af0148c3f871e55a6c4adf544af77a19fd17671] ASoC: codec: arizona: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [d2f277bf8aaed8c5307ab998b2de4346bed6e884] ASoC: intel: max98357a: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [db9912ce99c346c948c8fa774c0afc7d80d0ec20] ASoC: mediatek: mt8365-mt6357: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [f0bd6cb02505eca6adbe2e3ad3445a2420637c19] ASoC: codec: wm8978: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0808c1ab8d1a1222194d830870f6b2b47220b1d7] ASoC: intel: ssm4567: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [6dd61011a67e35b8d5f3b94193ed66d0c19ba425] ASoC: codec: lochnagar-sc: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [7c0572197faf3b6d6b27271455e76ac8ba84c43f] ASoC: audio-graph-card2-custom-sample2.dtsi: Separate Sample DT
# good: [cfb91be8f9c8e54e517a9a539012309101abcac5] ASoC: codec: wm9081: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2c4a2b5d084b06e1a9fd2e85866b51f6118dd254] ASoC: samsung: littlemill: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [bcb896a69864aec4dd0251732a380bcdbeff8c51] ASoC: intel: max98927: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [cb1ebf6e20371208c49d59615bf4b46d92991fc4] ASoC: mediatek: mt8195-mt6359: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c709a876b7de676d49b00b624b37d208e452cc7e] ASoC: mediatek: mt7986-wm8960: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [8410a099c88d1d720c9780b0ed716e544ea5a6d2] ASoC: rockchip: rk3399_gru_sound: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b15ea10972a1b4db23f7495003fccc6fe59e44bd] ASoC: tegra: tegra_wm8903: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [291b4eb984792fcc0bd3dec9ad9a69c3c6988951] ASoC: codec: wm8993: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9ef6a439bc987753b7e5af5a926f05debe82bd1c] ASoC: samsung: lowland: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [f5617b647c8597e2437b3899f520fdf65e0f277a] ASoC: intel: rt298: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [6d41096d7df609992479d6a3a43bc60e21b8e165] ASoC: intel: rt5514: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [d542f5bfa3e4e16aac6141abdd44bb8a2a6f0761] ASoC: codec: wm8990: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b1f5886cca25a6957b5541031376e2c06c5bd621] ASoC: mediatek: mt2701-cs42448: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [79b8a705e26c08f8f09dd55f1dd56f2375973d2d] spi: stm32: Add OSPI driver
# good: [27f5e88fdc8ab577dbff389085ae6ad41e994ae7] ASoC: codec: src4xxx: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1455b3857ca2d05966005f7172210f6bd00048c3] ASoC: samsung: tm2_wm5110: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [3d5f026256d985e8b81e7657a5430a9ff14e651c] ASoC: samsung: speyside: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [fd6bc2ba410bf7828dc2104bf78b51ccbb216c40] spi: dt-bindings: Introduce qcom,spi-qpic-snand
# good: [25baeacd9c6307830e2ed9f586f81fc23d4d1002] ASoC: codec: wm8904: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [862123a0a41647bd130a2d0edefc76a52dc8b8f8] ASoC: mediatek: mt2701-wm8960: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [69e35d9bfd6ba2837fe18bebf97ea747ceb110d5] ASoC: samsung: snow: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2d2223d742d968fec77ed056db9f158e7cb3ca94] ASoC: codec: wm8940: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [edca7ad57c50483ec81ab5b74ff1d71dca62e5cb] ASoC: rockchip: rockchip_max98090: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [06d07a4f5b98c71c696fa8f8718050b656ab99ba] ASoC: samsung: odroid: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [697c58941c0a0d1a5ea3f323cf0231018d3ec4b3] ASoC: samsung: aries_wm8994: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [294a60e5e9830045c161181286d44ce669f88833] ASoC: fsl_audmix: register card device depends on 'dais' property
# good: [bed97e35786a7d0141d1ecaaace03c46b5435d75] dt-bindings: spi: Add STM32 OSPI controller
# good: [ccf2a77a5d1504ca95c1ae5f37ed184e62dcd2f2] ASoC: intel: rt286: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0d4291fa3a8945d97d26a6bac8a4068f116f2885] ASoC: codec: wm8991: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [3f97e52562dd1ad041f63c910a746eab695f40c1] ASoC: samsung: arndale: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c8c1ab2c5cb797fe455aa18b4ab7bf39897627f6] regulator: pca9450: Handle hardware with fixed SD_VSEL for LDO5
# good: [99239dc5147ea4678e871e5c9d068a36f154558b] ASoC: rockchip: rk3288_hdmi_analog: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [38cc5b0bed6c57367dca3725d01857fa0876899a] ASoC: mediatek: mt8186-mt6366: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [feb849404a8b677aa6760d1539acf597e4574337] ASoC: SOF: Intel: hda-dai: Remove unnecessary bool conversion
# good: [522f5021cfb5a74e9b7aa3cbf365471f7a564c0a] ASoC: mediatek: mt8173-rt5650-rt5514: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [68084db5e7a5eb1e4901e2158565cfc59873756d] ASoC: codec: wm8974: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2725c018785d52286dd5b4ff7e087d2ff455a1a8] ASoC: codec: wm8988: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [35492f84fbd6d790ad7f93bffaaa6823890c103a] ASoC: codec: wm8994: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [eeb25b3ca1ef57d57906295d829febbd30cf4d8d] ASoC: mediatek: mt8173-rt5650: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [521c04c6e32ac110d942fa0e11bea4b91cc3241d] ASoC: ux500: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [597acf1a04bede55e3ad8a7922bba286c11112d3] ASoC: dt-bindings: fsl,audmix: make 'dais' property to be optional
# good: [93b1fefd8b1a004c6c8f8c92085e7bfb694dfe98] ASoC: codec: wm8983: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [abcb9a1fd89144536f3ef604f700e94424867366] ASoC: dt-bindings: fsl,sai: Document audio graph port
# good: [b73c2719c951868efc15181269a3caeb99157f29] ASoC: mediatek: mt8173-rt5650-rt5676: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [29664312a75e47f989ad32e43682746d8681a02b] ASoC: samsung: tobermory: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [a02c42d41af7d66db71ca43c52531c3253ebe35e] ASoC: codecs: wsa883x: Implement temperature reading and hwmon
# good: [9c914ef3b876a6f6c0059b4f4323fc1b76fa05e4] ASoC: codec: wm9713: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c6472392301fc15a09d5435f1f89421270aed81c] ASoC: codec: wm8962: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [7370a8fe5bd211042610ec200dcc83de5ccc50cd] ASoC: rockchip: rockchip_rt5645: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [d4ee06219f2fffb71e2a23fc5060fdd3c7bb2cf7] ASoC: mediatek: mt8192-mt6359-rt1015-rt5682: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [cc49a35ab19565c5eaef070755b6fba235f9d05a] ASoC: codec: wm8996: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [74da545ec6a8b41de96b4c350bb59dfe45c0d822] ASoC: codec: madera: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [04ea3e0d2e10642f0a0199081e9aa8fd5e1bbea6] ASoC: tegra: tegra_asoc_machine: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [7d73a1beaa9428ed4da7786725fcb1a20fd371ab] ASoC: audio-graph-card2-custom-sample.dtsi: remove original sample
# good: [541e0b4947a92f4bf1d60ef7e55f0a254d9c41a0] ASoC: codec: wm8960: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9002421ebb1409e2f47062722aad598b561cf9eb] ASoC: mediatek: mt8365-dai-i2s: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [5fee78e517ce0765def9387659fc56a1d5532c60] ASoC: dt-bindings: fsl,audmix: Document audio graph port
# good: [7304d1909080ef0c9da703500a97f46c98393fcd] spi: spi-qpic: add driver for QCOM SPI NAND flash Interface
# good: [0526b0b88c3092e38ba2d05f480b66bd5a1e1004] ASoC: mediatek: mt8365-dai-pcm: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [4586b056956995754e95456312b2a9ce36c8de21] ASoC: meson: meson-card-utils: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [6575dd53217ee5686d48a35f48415b113518d2a9] ASoC: codec: sgtl5000: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c80956630fa077646f971ff5d3e9452339742def] ASoC: codec: twl4030: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [22e5c40fda71d0b6cdf83af9418403808d5d06bd] ASoC: audio-graph-card2-custom-sample1.dtsi: Separate Sample DT
# good: [4994da5c7fea1ede9b71ae66e3b906ea56b9a929] ASoC: intel: nau8825: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [7f3ed7ea52f21d5b8ecc01a17fb8f7209d337cbe] ASoC: codec: wm8985: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b99c850bd41e8f6f142bb24c3c2485043b552621] ASoC: codec: wm8961: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [cc8e22b6b1622f44654a9ce70c1285c15c1b8414] ASoC: samsung: smdk_wm8994pcm: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0f68f56ab7be101fc949177774107769e63f13e9] ASoC: soc-dai: remove SND_SOC_DAIFMT_CB{MS}_CF{MS}
# good: [5dc6b4a351de9804932c4475a2c73c22c0b59369] ASoC: samsung: bells: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e15abfa60107f97fd8297faad8cc3dc4eae0b5cc] ASoC: intel: da7219: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [22bbcab0a2a100827a26833b7cab16ae8b1a3f9e] ASoC: samsung: midas_wm1811: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [fb44bd4902cd5df526ad432015edcfaf163999e2] ASoC: codec: wm8955: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [6cc4d2c11537d66e9d4a7356a576f1bea6f4009f] ASoC: meson: t9015: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [795aad6b179de4c3f68b18132bd183931d09c462] ASoC: samsung: smdk_wm8994: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [711035c043b3a5116860b3a25d808572f70e1dc1] ASoC: mediatek: mt8183-da7219-max98357: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [ed86f7b7e5f676c24ba0ddd86de6614a4b69a9e4] ASoC: codec: wm8971: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c417a7cf976eb8ecd8ebca439ec0cb0fe9ddc7ec] ASoC: codec: wm8995: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [47c59833c42a99bd27826f4f369bf4bb433c7ff9] ASoC: mediatek: mt8173-max98090: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1c418cf146380031b13b6fde02f944830e5b9155] ASoC: codecs: rt5514: Fix definition of device_id tables
# good: [ad3993c449637fcec1e05bd2b63c24d34cb82243] ASoC: codec: wm8804: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e2bcc61a4481c3de4747014895cef45d701956bf] ASoC: codec: wm8523: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9b9cbc6b4fa312d963f4373e88b6e27106f2051a] ASoC: codec: wm8776: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [8f5ae83953335d9c4c8d1cb698b87cea1ac8aeca] ASoC: codec: cs42l73: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9aa85f433bb1f51b599278b29b3d6224ca5147cf] ASoC: codecs: rt5670: Fix definition of device_id tables
# good: [48d5e50e4fe78bf9cc5b4eca72798d4507da62fb] ASoC: ti: ams-delta: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [dc946ef548aeeea258b040087b88c9b7fae5cb6d] ASoC: codec: cs43130: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e5f0c2ad987b494ab94bcb1331667d189249f234] ASoC: codec: da732x: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [a06ef7754b8e6f45d78c0015c3edb2117945adfb] ASoC: codecs: rt5668: Fix definition of device_id tables
# good: [a212edb16ca0698c488c6adfa6854224666c8cc1] ASoC: codec: rt286: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [f8ca280bf5c2a3fb08890bdd212a3f3c00589f87] ASoC: qcom: sc7280: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [952b334dcfcf641a6290b876bdc226c23772287e] ASoC: codec: cs42l42: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [bb0b8a07192d86b291c5b13fb64ef984930f8ea6] ASoC: codec: wm8737: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [90fd7bb1af1733685f0aece12dd7264d4ef68422] ASoC: codec: cs42xx8: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [bc17eaf1b925595fb9f945ced5d70fe82ce11e78] ASoC: ti: davinci-evm: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [4869417f4a2b010e9ee00f611265f551a47e4f1a] ASoC: codec: rt5668: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0c57e55719681412e87db7bb81b8255b43d6162f] ASoC: codec: cs530x: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [74f6e045d879414ae4c352dc7f4e8d438ea9d55d] ASoC: mxs: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [4d34ea6709894243d55ae6a6b63834851f9c5d6f] ASoC: codecs: rt5660: Fix definition of device_id tables
# good: [1fca457c22a277ba47ae1bdd2a09d42926a5beed] ASoC: codec: nau8822: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [668db717850296122fa0e2aff471cd20a722e0c5] ASoC: codec: rt1308: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0b74ed5533c87db1abe3967e3a370bc3046892c7] ASoC: codec: rt5665: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [d17b39f6d3e635b039314726fbc66dcef286ed79] ASoC: codec: wm8770: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [7f15da9a55d3ba9f8c3af545246a4588102a38db] ASoC: codecs: rt286: Update definition of device_id tables
# good: [a018b6601c47e7d989f1fe5c175325f85dceb264] ASoC: codec: wm8741: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9261d67d8bd2d9e787ceee8ff593f105bb3f5176] ASoC: codec: rt1305: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [fad200733e5026b103ec2504ad3dfc2843216cc8] ASoC: codec: cs42l51: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [85188e3bd7cb4141181f24a59f9057c38ffa37bf] ASoC: codecs: rt5651: Fix definition of device_id tables
# good: [e9d9a43e3f00b9313013b78d915a1f97dd215bf5] ASoC: codecs: rt5663: Fix definition of device_id tables
# good: [dfdc0debf1b82354e301843f8cbd16eaf05a01c6] ASoC: ti: osk5912: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [67f2243f2b1f1936c4dc22897289f5815a0e224a] ASoC: codec: rt5660: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0ad3a7d311f0e93f2e838b4e47a7da57c501d737] ASoC: codec: rt5663: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b9dde447dd27f1b3ca21e07da1d885fd342cfa62] ASoC: codec: cs42l56: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e9ab4b38205a34fffe537b4db721458b5d07066e] ASoC: codec: cs4271: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c974655b0c7f82a760bd22d9ef9db281e765a9a2] ASoC: codec: cs4265: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [8450fa6b16e2f46f5b880e0b80d55ab9fc4524ca] ASoC: Documentation: Codec to Codec: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [d3a37a664ebe57471bd7ab2486dd3072a9c07378] ASoC: codecs: rt5645: Fix definition of device_id tables
# good: [461deb4911f39e455756cbc42928b12b04e82851] ASoC: codec: wm2200: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2f8b07842e9e95122b848727ea73504a035e7c12] ASoC: codec: wm8900: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [92acd9f7409d2939e5fef8bde5ad527b9e525229] ASoC: codec: wm8753: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [dee14c5b6d29886255c4a54599590d49fc1754be] ASoC: codec: wm8524: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [46dbe25747fca3d82e98dca488fa9be6b809d522] ASoC: codec: cs4270: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [df95f0157ba1ea7b73b3f1db4abfdb4b05e0bfd9] ASoC: amd: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2f120ee8026ab9630dc7f93dd4bafdcd56c82056] ASoC: codec: nau8825: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [24684cc2060150afd7a1ea47c586f9c09330633c] ASoC: codec: wm8400: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [ed4bef1d52ce0d6c96a86b6a470d6777034c564c] ASoC: codecs: rt298: Update definition of device_id tables
# good: [941abe67e176a3ddbe59cd4323b13f69515f6628] ASoC: ti: omap3pandora: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [5cfb2f62242b41e2b60cadf21b28ee43cf615ec2] ASoC: ti: j721e-evm: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b26c604a0dcef62e7c61bd1d560c63547c9bbfe8] ASoC: codec: cs35l32: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [4be54b6bdafad7656fd85c1fa6b7bebb7700a3d2] ASoC: codec: wm8750: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [24a4302478118ff1caf39fb48809c0127f608664] ASoC: codecs: rt5659: Fix definition of device_id tables
# good: [6de7c4def7a6bf967d6603f7e1abda5231ccc312] ASoC: codecs: rt5682: Fix definition of device_id tables
# good: [4d20a35acef6fb8c42eff953a11759e94710ba8b] ASoC: codec: wm8728: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [f1205656ef2334e860ced588e76dd88119394166] ASoC: codec: rt5659: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e759aeeb1d09147891e08682df3a70dfbd15724a] ASoC: codec: cs53l30: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9c7cf29bdb11cfdd1b59d1ea1eb852245b26e93a] ASoC: codec: rt274: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [fc0a8ee9921f50ac23b3264846720d1d15be539e] ASoC: codec: da7219: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1a126668ab0946ebb7d1450742cd14775aa298fa] ASoC: codec: wm8903: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2d5e9d40998b441485376b8729c69073d8f2ab9d] ASoC: codec: rt5616: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1b16920e651d11811ca4b3a5d92cfb3d817b1a14] ASoC: codec: rt5631: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [dfc6b8ccb1bb8d591cd26571e554208fc4af7d0c] ASoC: codecs: rt5640: Fix definition of device_id tables
# good: [e42ec97657fa5ee40fd2358c973d273edd7999bd] ASoC: pxa: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [739f4f44dc42b866090297adc1f007ffcdefb602] ASoC: codec: nau8540: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [3c2e63a3a0efa8c52f9fd67f58a71af48957ca7a] ASoC: codec: cs4234: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [5f2d29942c82d229dbdafe4bd21585d1b67f31ee] ASoC: codec: rk817: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b89d9d26fb6cbc9f6e0aae72a2a76b5d8e5f1023] ASoC: codecs: rt5665: Fix definition of device_id tables
# good: [d21e3b442ff6401511831ae1b8be11d530f063de] ASoC: codec: cs35l34: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [420663ae8fa2d70d2b824848763ca15bb5b2b585] ASoC: codec: wm8510: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2920be2fabcb8010fefdf101d84fe0867730d925] ASoC: fsl: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [2281565db79b5fd6b539e73a28e73fc960ee34d4] ASoC: codec: rt1015: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1b94f3874d61b34febd5ddf3482a90107dc80082] ASoC: codec: wm8580: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [9fde82ea39a7f52c23de366c8592d4805634f45c] ASoC: ti: omap-twl4030: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [474cd6355413b264087ddc66b1dbc6c7e59fb76f] ASoC: codec: wm8350: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [6f8ac982806a104e4e816e12279d85440b6f703f] ASoC: codec: da9055: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [042ecb2ab2361f77b34a7d3c642bd378f6ecc73a] ASoC: codec: wm8711: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [f61c11db0f598eed6dd35a2d700ca54c6c74af4a] ASoC: codec: rt5682: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b3a3eda6cb30f21b818f40795468ff0a9f629990] ASoC: codec: rt5670: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [4042bb6e973aded1de6ce83436804a90181d6357] ASoC: codec: wm5100: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [739db0529c2a3ac5a0dc3e5a76a46ce80735dcfa] ASoC: codecs: rt5677: Update definition of device_id tables
# good: [a3c86259f8a402aa050fc5f3039f94c7872e4657] ASoC: codec: nau8810: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [1ef8b1c830a0b5a6600d803a8bbeb7179d3ca4da] ASoC: codec: cs42l52: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b865e0823cbffb747173b7dd4f4c8d82491d111f] ASoC: codec: rt1011: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [40213f8d5b498f5eb2f3297ee0f9c84d98737ee9] ASoC: codec: rt5677: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [bd178280c7d967e87e217b51c0647a2bfdf5deec] ASoC: codec: rt5682s: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [ea38f63c4afdd5531fbd8f0f881594a94c4bd413] ASoC: codec: cs35l33: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [a1cadae42c9bc52cff24b22b0c4986be8d82ae16] ASoC: qcom: sc7180: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [5a84cbb03094fd903ed79ca6c06e558821a69be4] ASoC: codecs: rt274: Fix definition of device_id tables
# good: [231bf041d425a086ec08231c98cf02b6fb16b169] ASoC: ti: n810: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e41ebb0a1f8bff63c8e333eec34ff64e748227d0] ASoC: codec: rt5651: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [b50e5b9694e2a4355f2abeaa711dae5190661c27] ASoC: codec: da7210: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [3165df2f130d567e6cf05d789ecc28810519e5f7] ASoC: codec: rt5645: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [acac29fa62a8b738569a99da2f6458bc21aa55ae] ASoC: codecs: rt1318: Fix definition of device_id tables
# good: [84f32702f3efe02c2622b9151d4e08c436249a8c] ASoC: codec: rt298: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [7177a7a8e10d7722d0b9d4be4eea7dde014527b9] ASoC: codec: da7218: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [e23d68d7d3b35a44eb83d834b65cd28ca08844ec] ASoC: codec: nau8824: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [60143172c63daa49fef6eb9daa066fb7f1360bbe] ASoC: codec: rt5640: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [f9ef0947ba848467e4dcca6b5ab3a4ff2e218df6] ASoC: codec: rt1016: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [0d41068ca151a6368ab4591c13e9a7a9fb92a56f] ASoC: codec: cs4341: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [30e03871146129acb75adac48405c203f5bdb3c2] ASoC: codecs: rt1308: Fix definition of device_id tables
# good: [b686559772d1baa28e2ad346d5a9932863d9523c] ASoC: codecs: rt1011: Fix definition of device_id tables
# good: [0440f938aacf54a3e7dc67cd898f76bbd371da49] ASoC: codecs: rt1305: Fix definition of device_id tables
# good: [e7795c17b82684afb9390b8788f781c07be1a368] ASoC: codecs: rt1016: Fix definition of device_id tables
# good: [a859d2383f66002a442218bf5083faaa674bc4e4] ASoC: codecs: rt1015: Fix definition of device_id tables
# good: [689e4d5fd8a76c676f04bc8916d78ca5db3130db] ASoC: codecs: rt1019: Fix definition of device_id tables
# good: [5e9f822c9c683ae884fa5e71df41d1647b2876c6] iommu: Swap the order of setting group->pasid_array and calling attach op of iommu drivers
# good: [c5c4ce6612bb25ce6d6936d8ade96fcba635da54] regulator: cros-ec: use devm_kmemdup_array()
# good: [6ddd1159825c516b8f64fda83177c161434141f5] regulator: devres: use devm_kmemdup_array()
# good: [1455f0badd6345b2606bafb32e719d252293ebcd] Convert regulator drivers to use
# good: [579a20181cf2e9ddc2f1265ee4976a0e2631fd5d] Convert sound drivers to use devm_kmemdup_array()
# good: [c173b5ee81a25e8aafb21ccdb7ab457da7783bf1] ASoC: uniphier: use devm_kmemdup_array()
# good: [0bd862846e7f89910252cbef8718a757950f1683] ASoC: Intel: avs: use devm_kmemdup_array()
# good: [3e706be02befae55b50b240d4360b5993f9879a8] ASoC: hdac_hdmi: use devm_kmemdup_array()
# good: [d9d71a6e2d19a2f3ccebea0092b8ddc1e935886f] ASoC: uda1380: use devm_kmemdup_array()
# good: [b26205e172ca035e327e49edb0c2611e5d2ede8d] ASoC: meson: axg-tdm-interface: use devm_kmemdup_array()
# good: [69aaab0e65e9bd7601740c1e14cc6de86dafb621] ASoC: tlv320dac33: use devm_kmemdup_array()
# good: [d0343fdb567dddaa74ac1b7b6994fd70100a0f6e] Add SDCA register map support
# good: [c143755d8cce31e770234732ff23134993b0550f] ASoC: SDCA: Add helper to write out defaults and fixed values
# good: [fd80df352ba1884ce2b62dd8d9495582308101b7] regcache: Add support for sorting defaults arrays
# good: [79ed408b2402e8113aa5a298f3bb9088ede58f6c] ASoC: mediatek: mt8188: avoid uninitialized variable use
# good: [28c12866c22c2826ccbd8c82dc353f02ab2deea5] ASoC: SDCA: Add regmap helpers for parsing for DisCo Constant values
# good: [825687c1662c53ecda991adf0ecfd8dd3d864043] spi: dt-bindings: Add rk3562 support
# good: [e3f7caf74b795621252e3c25b4a9fb6888336ef1] ASoC: SDCA: Add generic regmap SDCA helpers
# good: [be1e3607f29a5a182eaa70e3058aef32fd0cc4f8] ASoC: tas2781: Clean up for some define
# good: [a54a659f5cc25e3b23ab19af08d0b23488bd9f4e] xlnx: dt-bindings: Convert to json-schema
# good: [a206376b425472c7c3a824f47a9967a4c97ae32c] ASoC: dt-bindings: xlnx,i2s: Convert to json-schema
# good: [1d2e01d53a8ebfffb49e8cc656f8c85239121b26] spi: spi-imx: convert timeouts to secs_to_jiffies()
# good: [62142da241a08006f89b0620f7291e3a08c0a094] ASoC: rt712-sdca: Add FU05 playback switch control
# good: [7ed7065dfbbac1b5405a0c8029299847e408cf97] ASoC: dt-bindings: xlnx,spdif: Convert to json-schema
# good: [1b8b6dd0c91b7db58e344f01781932458ac43da3] ASoC: dt-bindings: xlnx,audio-formatter: Convert to json-schema
# good: [55a1abd6e76ce91eb6049f32efec3a8506686748] MAINTAINERS: Add Vincenzo Frascino as Xilinx Sound Driver Maintainer
# good: [32fcd1b9c397ccca7fde2fcbcf4fc7e0ec8f34aa] spi: spi-fsl-lpspi: convert timeouts to secs_to_jiffies()
# good: [dc64e1b9da22496b5867f90315ac406be041db15] Enable DMIC for Genio 700/510 EVK
# good: [bf1800073f4d55f08191b034c86b95881e99b6fd] ASoC: mediatek: mt8188: Add reference for dmic clocks
# good: [b80fd34df2580f2c7a99e7188d68515bcf779714] Fix RK3588 power domain problems
# good: [38399716e353776dca7f04dbae98a07af68f2880] ASoC: ti: rx51: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [6542db20caf4987b938ed8feec07d199779823f2] ASoC: dt-bindings: fsl,easrc: Reference common DAI properties
# good: [390ebb24b3c3a95e109c28e14c2ec9fe3f0f8aaa] ASoC: mediatek: mt8188-mt6359: Add DMIC support
# good: [63d93f4d0f38fbb95a55729fbd2cc4920743931c] ASoC: q6dsp: q6apm: replace kzalloc() with kcalloc() in q6apm_map_memory_regions()
# good: [f9d4f699751f0389e57f26382174334670b8276e] ASoC: imx-card: support playback or capture only
# good: [d909b8d13a13d0197877e16aaaa3b2fcbb502858] ASoC: Intel: avs: Mute and multi-channel controls
# good: [ef6a24c79d5047c029577113af43eddd1d0f1bd2] ASoC: mediatek: mt8188: Add audsys hires clocks
# good: [f00b3056843d14754ac1bab2106cf5599680f115] ASoC: dt-bindings: mediatek,mt8188-mt6359: Add DMIC backend to dai-link
# good: [22254fca9bc7655801ad5f2af15729e44d28b85c] ASoC: dt-bindings: fsl: Reference common DAI
# good: [3e7b375752b5e4de56e92dfb9c43309cd985b869] ASoC: dt-bindings: fsl,imx-asrc: Reference common DAI properties
# good: [7d87bde21c73731ddaf15e572020f80999c38ee3] ASoC: mediatek: mt8188: Treat DMIC_GAINx_CUR as non-volatile
# good: [1c4749873bd0f769a47372636a428484e7035f59] ASoC: kirkwood: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [c1e42ec04197ac013d049dde40d9c72cf543b5f6] ASoC: mediatek: mt8188: Add support for DMIC
# good: [8fd0e127d8da856e34391399df40b33af2b307e0] ASoC: amd: acp: acp70: Remove unnecessary if-check
# good: [5a09e179024e76afdf9ad3a6ae767b4e06884ea8] ASoC: Documentation: DPCM: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [a5a3de8990f47f4c54ca5daeeea8ff7daa42f9de] ASoC: sh: migor: use inclusive language for SND_SOC_DAIFMT_CBx_CFx
# good: [4c32ebcc8650ce506632a32136993c85537fb01a] ASoC: Intel: avs: Move to the new control operations
# good: [76e013152891a69dfe68a28706a51a7df9ed4c42] ASoC: Intel: avs: Honor the invert flag for mixer controls
# good: [10188a25c9b5944c0a912482011b484b7c2e22d4] ASoC: Intel: avs: Update VOLUME and add MUTE IPCs
# good: [28feec15fa285e561c626b3490bc5a10f5d177c8] ASoC: Intel: avs: Make PEAKVOL configurable from topology
# good: [0dffacbbf8d044456d50c893adb9499775c489f4] regulator: Add (devm_)of_regulator_get()
# good: [1877c3e7937fb2b9373ba263a4900448d50917b7] ASoC: imx-card: Add playback_only or capture_only support
# good: [a4217a03686989c4a79530fe54fa17576aff7330] ASoC: Intel: avs: Add support for mute for PEAKVOL and GAIN
# good: [a9409fcb979eaff401837b955b234ca1ee05fdbd] ASoC: Intel: avs: Support multi-channel PEAKVOL instantiation
# good: [81eb3a2bd273b84fa9808e6b13b533f9c55e16eb] ASoC: topology: Save num_channels value for mixer controls
# good: [c321a4d705a31a50d7580516422aaa5b853e7602] ASoC: Intel: avs: New volume control operations
# good: [8c6ede5cc4226fd841f252d02ab0372cb92ee75c] ASoC: dt-bindings: imx-card: Add playback-only and capture-only property
# good: [4c43a930e3e165ca6890147a309508ccb6768faf] ASoC: Intel: avs: Add volume control for GAIN module
# good: [758beab0252912395efb79f34095c5ae7e3e58b1] ASoC: topology: Create kcontrols based on their type
# good: [18311a766c587fc69b1806f1d5943305903b7e6e] err.h: move IOMEM_ERR_PTR() to err.h
# good: [2fa56dae1a65e8124d417a31d7b02c37df013817] ASoC: fsl: fsl_qmc_audio: Remove unnecessary bool conversions
# good: [91b75129149429bb16927cda8b5642c04c59e6b0] ASoC: SOF: amd: Move depends on AMD_NODE to consumers
# good: [99e297cdd338b8a18c986ed4e088676579b7fe96] iio: imu: st_lsm9ds0: Replace device.h with what is needed
# good: [a103b833ac3806b816bc993cba77d0b17cf801f1] devres: Introduce devm_kmemdup_array()
# good: [10efa807929084a8a1c38655942a3bf83bce587a] ASoC: cros_ec_codec: Use str_enable_disable() helper in wov_enable_put()
# good: [88e09306b7e0f8a9e9f9c729ac13ccd11ed9679d] ASoC: atmel: atmel-classd: Use str_enabled_disabled() helper
# good: [a21cad9312767d26b5257ce0662699bb202cdda1] driver core: Split devres APIs to device/devres.h
# good: [b47834ee4485bbdcc6d36f086ff61c3efd8870d4] ASoC: SOF: amd: Add depends on CPU_SUP_AMD
# good: [64899904d6103500ad01be7b763298dc939285ae] ASoC: soc-core: Use str_yes_no() in snd_soc_close_delayed_work()
# good: [f3bfa0f07976a7996b6dedba21d2e0d164f08ce8] spi: dt-bindings: Convert Freescale SPI bindings to YAML
# good: [2e2f89b184644f0e29f1ec0b4dcfd0361d2635cb] firmware: cs_dsp: test_bin_error: Use same test cases for adsp2 and Halo Core
# good: [42ae6e2559e63c2d4096b698cd47aaeb974436df] firmware: cs_dsp: test_control_parse: null-terminate test strings
# good: [cb15abd47806b449e853caf43f41573c4c82fed3] spi: s3c64xx: extend description of compatible's fifo_depth
# good: [66d8e76e8e85a30fbf9809837e07e15a8c5ccb8b] regulator: pca9450: Remove duplicate code in probe
# good: [c8d08464bce947ee060e0174a3f4e87503269d0c] ASoC: dt-bindings: atmel-at91sam9g20ek: convert to json-schema
# good: [f120cf33d2325fd95d063eccbff2e86ffc7f493a] ASoC: SOF: amd: Use AMD_NODE
# good: [67ebf71236f2e7b0e4cf791700dcddc9eb8cf650] Adjust all AMD audio drivers to use AMD_NODE
# good: [40d05927830227f2a1701c61e8bbe65287a03490] ASoC: amd: acp: Drop local symbols for smn read/write
# good: [e211adcf36d0ccdd31af7398af4725a47d74b3d4] ASoC: amd: acp: rembrandt: Use AMD_NODE
# good: [135c6af1cac5465529469700d16c0c44b24ce317] ASoC: amd: acp: acp70: Use AMD_NODE
# good: [a261d77fec147b9974aacca8ae8f0693feede838] ASoC: SOF: amd: Drop host bridge ID from struct
# good: [8f969537149d672d40a0e75a83f39451a5402780] ASoC: amd: acp: acp63: Use AMD_NODE
# good: [c893ee3f95f16fcb98da934d61483d0b7d8ed568] x86/amd_node: Add a smn_read_register() helper
# good: [d1a09c610027e446ed30c21f61c2f2443bf92a3f] MAINTAINERS: adjust the file entry in SPI OFFLOAD
# good: [a78f244a9150da0878a37a1b59fb0608b1ccfb9d] ASoC: SOF: imx: Fix error code in probe()
# good: [b20be2c77ce5341ded1a2d8aec119f6dca8ef1ad] ASoC: SOF: imx: Fix an IS_ERR() vs NULL bug in imx_parse_ioremap_memory()
# good: [5d9fca12f54d3e25e02521aa8f3ec5d53759b334] ASoC: amd: ps: fix inconsistent indenting warning in check_and_handle_sdw_dma_irq()
# good: [0770b7cc095e015af302f0758d3d85c7f17c719a] ASoC: tas2764: Random patches from the Asahi Linux
# good: [3f02dedf1566858736f351a8d4a3ce91375e48f1] ASoC: random cleanup
# good: [e0f421d73053eaeb441aa77054b75992705656c7] ASoC: SOF: ipc3: Use str_enabled_disabled() helper function
# good: [5c7e4c4da8586d2ef55a11a9f4df626b8ea9a146] ASoC: dt-bindings: wlf,wm8960: add 'port' property
# good: [783db6851c1821d8b983ffb12b99c279ff64f2ee] ASoC: ops: Enforce platform maximum on initial value
# good: [9dc016eaba3a70febcd1db5f1a0beeb7430166aa] ASoC: SOF: Intel: Don't import non-existing module namespace
# good: [9f25b6f2568d50c247a8e3b031a0a5caee8c17d2] ASoC: wm_hubs: Use str_enable_disable() in wm_hubs_update_class_w()
# good: [e08fe24c34d37d00e84009f2fb4c35f5978041e6] ASoC: SOF: Intel: Use str_enable_disable() helper
# good: [735049b801cf3d597752017385cfc8768ce44303] x86/amd_node, platform/x86/amd/hsmp: Have HSMP use SMN through AMD_NODE
# good: [7e1caa679686dde5c24d60b139f234568045758f] ASoC: soc-pcm: makes dpcm_dapm_stream_event() void
# good: [6b06755af6679fd7c98ebc017ac31c8a74127538] x86/amd_node: Add support for debugfs access to SMN registers
# good: [1c3b5f37409682184669457a5bdf761268eafbe5] ASoC: tas2764: Power up/down amp on mute ops
# good: [f37f1748564ac51d32f7588bd7bfc99913ccab8e] ASoC: tas2764: Mark SW_RESET as volatile
# good: [bebe0afb74514ae51f4f348b28326c658b02209d] x86/amd_node: Add SMN offsets to exclusive region access
# good: [d64c4c3d1c578f98d70db1c5e2535b47adce9d07] ASoC: tas2764: Add reg defaults for TAS2764_INT_CLK_CFG
# good: [42da18e62652b58ba5ecd1524c146b202cda9bb7] ASoC: soc-pcm: cleanup dpcm_fe_dai_do_trigger()
# good: [40b1f89a1691c4b7740bec2c868f1e4c60346353] ASoC: remove dpcm_process_paths()
# good: [3aebbcba4baaa81bc8c83f2229ed8e774cf40618] ASoC: soc-pcm: cleanup dpcm_dai_trigger_fe_be()
# good: [1248d29464cc682c2a1793cfc5d4ebeb374c6738] ASoC: soc-ops: makes snd_soc_read_signed() void
# good: [08a66f55f7246d477b19620a953476dfc02beefc] ASoC: tas2764: Wait for ramp-down after shutdown
# good: [238c863eb3d3c6ed58493bacfd1f4b36bdcfa92f] ASoC: soc-core: makes snd_soc_set_dmi_name() local
# good: [257a060fe219bb0dcb98f12ce34f04eca6d08352] ASoC: remove update from snd_soc_card
# good: [7f1186a8d738661b941b298fd6d1d5725ed71428] ASoC: soc-dai: check return value at snd_soc_dai_set_tdm_slot()
# good: [11c1967f1a796bf2ff56a7118147f1d39d9f5ee0] ASoC: soc-pcm: no need to check dpcm->fe on dpcm_be_connect()
# good: [0c4a06395156d16ea33e959fccea84e4cfec04c4] ASoC: soc-pcm: remove duplicate param from __soc_pcm_hw_params()
# good: [74e0fcbd705d4277267311f8f26a00bb8ce93820] gpiolib: add gpiod_multi_set_value_cansleep
# good: [994719ed6d81a6f4677875ab6730254c0bc484ea] ASoC: Intel: avs: Use str_on_off() in avs_dsp_core_power()
# good: [ae575d2145d1a2c8bb5d2835d7d54751f3b0bace] ASoC: tegra: Remove the isomgr_bw APIs export
# good: [828c0aa63706410503526d0ee522b9ac3232c86b] ASoC: amd: ps: use switch statements for acp pci revision id check
# good: [f22ba3561daa792dd138ed543e0bf48efe0b999c] ASoC: SOF: imx-common: set sdev->pdata->hw_pdata after common is alloc'd
# good: [ad0fbcebb5f6e093d433a0873758a2778d747eb8] ASoC: adau1701: use gpiod_multi_set_value_cansleep
# good: [e957c96455e8f4c630d5e374312cad0633ca7e17] spi: offload: fix use after free
# good: [d795a052b0ddad3da83dda6ff522c1b1aaa4a525] spi: fix missing offload_flags doc
# good: [91931af18bd22437e08e2471f5484d6fbdd8ab93] gpiolib: add gpiod_multi_set_value_cansleep()
# good: [ff4d4158ef9143327a42f7be4298751cb0d1be69] spi: spi-offload-trigger-pwm: add extra headers
# good: [fcd7ace9a725ae034ff9f24cb94c9fe12a1f02da] spi: offload: types: include linux/bits.h
# good: [21aa330fec31bb530a4ef6c9555fb157d0711112] ASoC: fsl_micfil: Add decimation filter bypass mode support
# good: [ad1212a9cc24b740b2711014933fac6ace32aa2d] arm64: dts: rockchip: Add SPDIF on RK3588
# good: [f46eb2bfb878ce3345725252f77fa3ba36a0f087] spi: axi-spi-engine: add offload support
# good: [c5528214c7c0a753c908a7b353309ba665985fb4] ASoC: codecs: wcd93xx-sdw: fix of_property_read_bool() warnings
# good: [e97d06cb4386af4e069a2dc713de70500538d0bd] ASoC: tscs454: Use str_enable_disable() in pll_power_event()
# good: [d1541caab053cf94b114582a23b51a8cb90f4a46] Add SDCA DisCo parsing support
# good: [3c331bdeececb629669961a80c0f929301c088d2] Refactor imx drivers and introduce support for
# good: [330cbb40bb3664a18a19760bd6dc6003d6624041] dt-bindings: ASoC: rockchip: Add compatible for RK3588 SPDIF
# good: [447c98c1ca4a4b0d43be99f76c558c09956484f3] tools/power turbostat: Add idle governor statistics reporting
# good: [5132681dcd96b2a8c357b6e5d93e9876924bb80b] tools/power turbostat: Fix names matching
# good: [005859a2cf7aa349fbbfe433ab1769b15c535b72] ASoC: amd: Add support for ACP7.0 & ACP7.1
# good: [700a281905f2a4ccf6f3b2d3cd6985e034b4b021] spi: add offload TX/RX streaming APIs
# good: [563e40153a56cbfae8721f9591022df5d930f939] ASoC: SOF: imx8: use IMX_SOF_* macros
# good: [629dd55cf77bd3a8f80049150d3c05fef6d3b468] ASoC: SDCA: Minor formatting and naming tweaks
# good: [651e0ed391b148f83afba0bfbd8a56e38e58c34d] ASoC: SOF: imx: introduce more common structures and functions
# good: [07e3e514dd385300bd08da4a8df09240d272821e] ASoC: SOF: imx: merge imx8 and imx8ulp drivers
# good: [d7231be4b4657e5f922a4c6dc11e8dffc71fee87] spi: offload: add support for hardware triggers
# good: [f98d42000216677d177384f202ff1cc896a7395f] ASoC: Intel: soc-acpi-intel-ptl-match typo fixups
# good: [645753d01356ff1a756812f1c69c53eb5c9081cd] ASoC: SOF: imx8: use common imx chip interface
# good: [5a19e1985d014fab9892348f6175a19143cec810] spi: axi-spi-engine: implement offload support
# good: [896530b7b0c08ee8b3296d5f012bfe1b0a979b86] ASoC: SOF: imx: merge imx8 and imx8m drivers
# good: [ebb398ae1e052c4245b7bcea679fe073111db2ce] spi: offload-trigger: add PWM trigger driver
# good: [5c93b20f6de4478e1fbcfb38eb46738bca74180e] ASoC: SDCA: Add support for IT/OT Entity properties
# good: [f87c2a275033120e15213f3d65234d98e726c4b7] ASoC: SDCA: Add Channel Cluster parsing
# good: [19f6748abbab8523a7b32a5e371e39d4d8d4aba5] ASoC: SDCA: Parse initialization write table
# good: [42b144cb6a2d87385fa0b124c975d6cf1e3ec630] ASoC: SDCA: Add SDCA Control parsing
# good: [8e02d188698851436f76038ea998b726193d1b10] spi: add basic support for SPI offloading
# good: [e1101373df5cd7672d988bb4e9cdd5eb97003165] spi: dt-bindings: axi-spi-engine: add SPI offload properties
# good: [9ee6d50ae4b0fe14ed70a5265a05874d41e10848] ASoC: SDCA: Add support for Entity 0
# good: [9da195880f167ab7c2d595388decf783c9920121] ASoC: SDCA: Add support for PDE Entity properties
# good: [64fb5af1d1bbcf1b808e9bb092b22fa1b691ae63] ASoC: SDCA: Add parsing for Control range structures
# good: [45e02edd8422b6c4a511f38403dbd805cd139733] ASoC: SOF: imx8: drop unneeded/unused macros/header includes
# good: [e80b8e5c53c30df1cba45258d10b04872b7eea67] ASoC: SDCA: Add support for clock Entity properties
# good: [6cf5df1040ba0694aea6a5edc6f31811a442ea36] ASoC: SOF: imx: add driver for the imx95 chip
# good: [83f37ba7b76ab17e029ab4127ec64ccccce64c00] dt-bindings: trigger-source: add generic PWM trigger source
# good: [996bf834d0b61cb5a1389356c1ed7db1230139d7] ASoC: SDCA: Add code to parse Function information
# good: [43d6140cedad9f031b47dfde6f85856e007b3f04] ASoC: amd: ps: refactor soundwire dma interrupts enable/disable sequence
# good: [491628388005a26c02d6827e649284357daec213] ASoC: amd: ps: add callback functions for acp pci driver pm ops
# good: [187150671d83324f1ca56f7ab5e00f16a3b9f2a9] ASoC: amd: acp: add RT711, RT714 & RT1316 support for ACP7.0 platform
# good: [1c35755f46423150e19ff57448786b4bb48fdb46] ASoC: amd: ps: implement function to restore dma config for ACP7.0 platform
# good: [fcb754602724fa2a1d0db72f13ddc3ef0306f911] ASoC: amd: ps: store acp revision id in SoundWire dma driver private data
# good: [d0252b0b945ec67fd09fc764dcadf445fb7757ee] ASoC: amd: acp: amd-acp70-acpi-match: Add rt722 support
# good: [31e3100d5e1fe69f944f84867be0cbfa5fd380c8] ASoC: amd: acp: amd-acp70-acpi-match: Add RT1320 & RT722 combination soundwire machine
# good: [0b6914a0121b4c9fc8f575b60a5dd43b74612908] ASoC: amd: ps: add soundwire dma interrupts handling for ACP7.0 platform
# good: [0eb8f83c055cb3461734710d1b1ce2dd4f01806e] ASoC: amd: ps: update module description
# good: [852c0b7204ded184924c41ab99b2ac7a70ad4dab] ASoC: Intel: soc-acpi-intel-ptl-match: add rt713_vb_l2_rt1320_l13
# good: [4b36a47e2d989b98953dbfb1e97da0f0169f5086] ASoC: amd: ps: use macro for ACP6.3 pci revision id
# good: [3898b189079c85735f57759b0d407518c01c745e] ASoC: amd: ps: add soundwire wake interrupt handling
# good: [c878d5c1a525b88807d9d79888fe8340bcbf1aa3] ASoC: amd: ps: add ACP7.0 & ACP7.1 specific soundwire dma driver changes
# good: [4bb5b6f13fd83b32c8a93fbd399e7558415d1ce0] ASoC: amd: amd_sdw: Add quirks for Dell SKU's
# good: [fde277dbcf53be685d0b9976d636366c80a74da8] ASoC: amd: ps: add pm ops related hw_ops for ACP7.0 & ACP7.1 platforms
# good: [91f505dc3a94c04421a2a51e8c40acf7ea67ecbc] ASoC: Intel: soc-acpi-intel-ptl-match: add rt712_vb + rt1320 support
# good: [e2ceac2f323625632f12dd5333092976298a0cde] ASoC: amd: ps: rename structure names, variable and other macros
# good: [552f66c40134542f15d4302837e7d581a0b8e217] ASoC: amd: update Pink Sardine platform Kconfig description
# good: [638ad2bdb2f994c8bd99cc40e0c4796a8617ccf3] ASoC: amd: acp: add machine driver changes for ACP7.0 and ACP7.1 platforms
# good: [7c0ea26c57b0bb72d503fe27d6533f5addc5e3a3] ASoC: amd: ps: add pci driver hw_ops for ACP7.0 & ACP7.1 variants
# good: [0a27b2d7a224326fab543ca586d501fe1857b655] ASoC: amd: ps: add soundwire dma irq thread callback
# good: [4516be370ced14c4fb454fd6cc016e47bffe109e] ASoC: amd: ps: refactor soundwire dma interrupt handling
# good: [6547577e94ae3d9f8ff30d3267fe7ec394e3b20d] ASoC: amd: ps: add callback to read acp pin configuration
# good: [605aab3b3ca83f58681841b2dd16d4a7baefde6c] ASoC: amd: ps: rename acp_restore_sdw_dma_config() function
# good: [0fa0843db17ccd427fc7a23d313aafa88fc89e04] ASoC: amd: ps: refactor soundwire dma driver code
# good: [db746fff89a14419379226ce0df8b94f472cf38c] ASoC: amd: ps: add acp pci driver hw_ops for acp6.3 platform
# good: [f1e91acacf86fb2cd7478af490326cb9aa63e8ae] ASoC: amd: ps: update file description and copyright year
# good: [a23ff143804d3b8c27157ffa19e48b4e22939115] ASoC: Intel: avs: Add support for MalibouLake
# good: [f0703ce627a25b4a1307d8a92cfd6d6bf7e27e7a] ASoC: cpcap: Implement jack headset detection
# good: [46ab7d80ed4f378e02cb249bd49a76026a2d683f] Add static channel mapping between soundwire master
# good: [f2d161e5804d8da070988624b9edd179ef31b478] ASoC: and adn use snd_soc_ret()
# good: [6b8f162bd3fa82c3c1b3653100d04172c1dbd8a5] ASoC: SOF: Improve the spcm and ipc4 copier prints
# good: [153dbf4adad0082d030c30d20541df2b1af52db6] regmap: irq: Use one way of setting all bits in the register
# good: [96dd187c93afe0ae0535276a92ed488759ace5a2] This is continued work on Samsung S9(SM-9600)
# good: [cb161c333927142818d6bf22a4da2b023fb2b8c9] ASoC: tas2781: Switch to use %ptTsr
# good: [583348bd65ceaf4a5067a6267dd236929e1b4b37] ASoC: SOF: ipc4-topology: Improve the information in prepare_copier prints
# good: [5ea46b4360791345bd0bf4c7bf8fff5151374ea1] ASoC: SOF: ipc4-pcm: Move out be_rate initialization from for loop in fixup
# good: [0e9a970d7b2cb98d741bc0e32ad8c8f30c009c63] ASoC: qcom: sdw: Add get and set channel maps support from codec to cpu dais
# good: [d959fed68e4d45ee80cbdd62976bda8da52ab8b1] media: qcom: camss: Add callback API for RUP update and buf done
# good: [2466b62268c020606d20b45e007c166399e639ee] ASoC: dapm: unexport dapm_mark_endpoints_dirty()
# good: [0a7c85b516830c0bb088b0bdb2f2c50c76fc531a] regulator: ad5398: Fix incorrect power down bit mask
# good: [c06c4f7cbea1d8dc71485bfddef2849a1b721e67] ASoC: codecs: wcd937x: Add static channel mapping support in wcd937x-sdw
# good: [ecfcee245cc99def0f6bf84ac75ac372f8ab65eb] ASoC: dapm: unexport snd_soc_dapm_init()
# good: [4c7518062d638837cea915e0ffe30f846780639a] ASoC: SOF: ipc4: Add support for split firmware releases
# good: [3f78762d17701f0435ad958b2821dc3243ff34b3] ASoC: dapm: unexport snd_soc_dapm_update_dai()
# good: [943116ba2a6ab472e8ad2d1e57a3f10f13485cc2] ASoC: add common snd_soc_ret() and use it
# good: [062b7ef6b103dcbcb3c084e8ace8e74e260b2346] ASoC: soc-utils: care -EOPNOTSUPP on snd_soc_ret()
# good: [9bbbf33a5ab84c0f3643f43350b0f473b60af5b8] spi: gpio: Enable a single always-selected device
# good: [a0ef5b4b101424b8a666ed56bf1717dafe2d37f5] ASoC: simple-card: use snd_soc_ret()
# good: [2d7395b23dbf4c2d60be49b73e4c4705fc446662] ASoC: simple-card-utils: use snd_soc_ret()
# good: [be61cd4242e4a53f5cf989ee7573121d041444bc] ASoC: soc-pcm: use snd_soc_ret()
# good: [72826381215e2f9d2bd2f32f63f76a80942b7fdf] ASoC: dt-bindings: wcd937x-sdw: Add static channel mapping support
# good: [7796c97df6b1b2206681a07f3c80f6023a6593d5] soundwire: qcom: Add set_channel_map api support
# good: [78e66dd5f32a1a8e5ee6decadd4e4dffa7d2c40d] ASoC: mediatek: mt8186: Remove unused mt8186_afe_(suspend|resume)_clock
# good: [860693187c597645b28a421d8acb26428b8afd3f] ASoC: SOF: pcm: Add snd_sof_pcm specific wrappers for dev_dbg() and dev_err()
# good: [169ec0a541aac8afb215ab591b0fd53276686014] ASoC: SOF: Relocate and rework functionality for PCM stream freeing
# good: [8d83282e53185ec257a4ce08812e8fabee2c7212] ASoC: audio-graph-card2: use snd_soc_ret()
# good: [4d2ea16576c8aa1437048cf436bff85653f139fe] ASoC: SOF: pcm: Move period/buffer configuration print after platform open
# good: [74a0ca4c7f19f1b273d665b3b53f7ae8af879658] ASoC: audio-graph-card: use snd_soc_ret()
# good: [b3d993c7566fed1c027c5c18f3ef482ba8e6307a] ASoC: amd: acp: Use str_low_high() helper function
# good: [215705db51eb23052c73126d2efb6acbc2db0424] spi: Replace custom fsleep() implementation
# good: [185ac20a7b055e025027d303b63dab456b4f5d5e] ASoC: rt722: get lane mapping property
# good: [c108905a7423d44237d17374f845fc5bb9cb9728] spi: gpio: Remove stale documentation part
# good: [6603c5133daadbb3277fbd93be0d0d5b8ec928e8] ASoC: dt-bindings: atmel,at91-ssc: Convert to YAML format
# good: [3f75771987f32a9f512c8944e70e343f8c6d71c1] ASoC: SOF: mediatek: Use str_on_off() helper function
# good: [678681828bf4abfd3c31f36390d2097682141d11] ASoC: dmic: Add DSD big endian format support
# good: [25fac20edd09b60651eabcc57c187b1277f43d08] spi: gpio: Support a single always-selected device
# good: [e27c125040b1e1f26d910b46daabbe55e67fdf3b] ASoC: codecs: wcd934x: use wcd934x binding header
# good: [8478dadc8148af311c3d43d4867cfb6632686ede] ASoC: dt-bindings: Add bindings for WCD934x DAIs
# good: [e3cd85963a20d2b92e77046a8d9f0777815f1f71] x86/mtrr: Use str_enabled_disabled() helper in print_mtrr_state()
# good: [652ffad172d089acb1a20e5fde1b66e687832b06] spi: fsi: Batch TX operations
# good: [8418753187ba216f8931432dd8a6ee2f23977ecd] staging: gpib: Make static, reduce fwd declarations
# good: [b2f10aa2eb18d289e48097e0ed973e714322175b] x86/entry: Add __init to ia32_emulation_override_cmdline()
# good: [fb6ec1d27608c008bfe1ab0dfec3720990eb2451] ASoC: mediatek: mt6358: Remove unused functions
# good: [4a91fe4c0d683c56044579fb263c660f5d18efac] ASoC: tegra: Add interconnect support
# good: [e92f042642aed6f6206caace892d9df2d0166841] ASoC: codecs: pcm3168a: Relax probing conditions
# good: [1a4a5a752fcd60797ed2cb7c06253c6433d13f63] ASoC: soc-ops: remove soc-dpcm.h
# good: [6eab7034579917f207ca6d8e3f4e11e85e0ab7d5] ASoC: soc-core: Stop using of_property_read_bool() for non-boolean properties
# good: [78683c25c80e54bf3e8015fdfb8cba2fcd03daa5] RDMA/mana_ib: Allow registration of DMA-mapped memory in PDs
# good: [cbe37a4d2b3c25d2e2a94097e09b6d87461b8833] ASoC: Intel: avs: Configure basefw on TGL-based platforms
# good: [79ebb596201c86712fe38b0ef73d25d07b932664] ASoC: Intel: avs: Add pcm3168a machine board
# good: [7d92a38d67e5d937b64b20aa4fd14451ee1772f3] ASoC: codecs: pcm3168a: Allow for 24-bit in provider mode
# good: [f0173cbe7fa79eafbdf32eed32337209f84ddacd] ASoC: Intel: avs: New gateway configuration mechanism
# good: [e995c51903384be1c7aead246dc30cb5244179ac] ASoC: Intel: avs: Move DSP-boot steps into individual functions
# good: [320155a61f7fc810a915644e9e2a451bdcea90b1] ASoC: Intel: avs: Remove unused gateway configuration code
# good: [26a756fc10fac6f133ef47f12362a39769dfe24d] spi: zynqmp-gqspi: Clean up the driver a bit
# good: [856366dc924a9561dae39f252b45dfd6cc6895ce] ALSA: hda: Select avs-driver by default on MBL
# good: [299ce4beaf714abe76e3ad106f2e745748f693e9] ASoC: rt722-sdca: Make use of new expanded MBQ regmap
# good: [a05143a8f713d9ae6abc41141dac52c66fca8b06] ASoC: SOF: topology: Use krealloc_array() to replace krealloc()
# good: [3c32a4386909e8023b3c49253fec33d267be16bb] regulator: Add device tree support to AD5398
# good: [f9a5c4b6afc79073491acdab7f1e943ee3a19fbb] ASoC: rt722-sdca: Add some missing readable registers
# good: [4343af66b8e1df1d3a2e6f1f8612506cb45b2afd] ASoC: Intel: avs: Add WHM module support
# good: [dc561ab16d8be9cbe8f07a49a7b2f5428fbcfeea] ASoC: codecs: pcm3168a: Add ACPI match table
# good: [b9fb91692af881736f8fa1741fa0dbadf07d99ee] ASoC: Intel: avs: pcm3168a board selection
# good: [c9e9aa80022c6db71bc097a621a6145f39aa0ade] ASoC: mediatek: Remove unused mtk_memif_set_rate
# good: [9b32c86e40da792544c53076f5ec43f115e56687] spi: zynqmp-gqspi: Clean up fillgenfifo
# good: [d61009bd578ee7381a3cce5c506190ecb8f9d6e8] spi: zynqmp-gqspi: Reformat long line
# good: [f5aab0438ef17f01c5ecd25e61ae6a03f82a4586] regulator: pca9450: Fix enable register for LDO5
# good: [d2ead60d853189f8e5ec6b301fac1e60e0b4b47d] spi: zynqmp-gqspi: Add helpers for enabling/disabling DMA
# good: [c1ac98492d1584d31f335d233a5cd7a4d4116e5a] spi: realtek-rtl-snand: Drop unneeded assignment for cache_type
# good: [ba54629287f58b22c1d37f80f1875373e4b51ea6] spi: zynqmp-gqspi: Add some more debug prints
# good: [89785306453ce6d949e783f6936821a0b7649ee2] spi: zynqmp-gqspi: Always acknowledge interrupts
# good: [c73be62caabbec6629689c705aea65e5ce364d5d] Revert "regulator: pca9450: Add SD_VSEL GPIO for LDO5"
# good: [b5ec74c2aec76fbdff9bc16951455602e11902bf] arm64: dts: imx8mp-skov-reva: Use hardware signal for SD card VSELECT
# good: [7ed1b265021dd13ce5619501b388e489ddc8e204] ASoC: cpcap: Implement jack detection
# good: [5a6a461079decea452fdcae955bccecf92e07e97] regulator: ad5398: Add device tree support
# good: [19d022d67d7353f0e6e9ba255435d3de93862ac4] regulator: ad5398: change enable bit name to improve readibility
# good: [5b4288792ff246cf2bda0c81cebcc02d1f631ca3] ASoC: cpcap: Implement .set_bias_level
# good: [f9cbf56b0a1966d977df87d15a5bdbff2c342062] dt-bindings: regulator: pca9450: Add properties for handling LDO5
# good: [995cf0e014b0144edf1125668a97c252c5ab775e] regmap: Reorder 'struct regmap'
# good: [3ce6f4f943ddd9edc03e450a2a0d89cb025b165b] regulator: pca9450: Fix control register for LDO5
# good: [f76ad354146d773d4cad436bb9004d230bffd6dd] Merge branch 'for-6.14/selftests-dmesg' into for-next
# good: [02d4a97ce30c0494ce6a614cd54d583caa0f8016] dt-bindings: mfd: motorola-cpcap: Document audio-codec interrupts
# good: [5e36be5973b6ac66198220365bffb7a3641038f9] Merge branch 'for-6.4/core' into for-next
# good: [26d6fd81916e62d2b0568d9756e5f9c33f0f9b7a] drm/connector: make mode_valid take a const struct drm_display_mode
# good: [7e17e80c3a7eb2734795f66ba946f933412d597f] Merge branch 'for-6.14/stack-order' into for-next
git bisect start 'eea255893718268e1ab852fb52f70c613d109b99' '97654dc13f139ea726042711a4943f424c5d5b83' '5cd09a324588b4554c9ed89cef34fa502a097d16' '8a7e7a03e3c53cd9abbbf233899cc2e05b2c6ec0' '1ec3f1dc215d4b3d3679ecdc4a549d4e82b3a609' '69823334200029767de785d30acf74e4872a11d3' 'db91ad81a2545eb82aa47d0306bc3e1adb05e336' 'a8fed0bddf8fa239fc71dc5c035d2e078c597369' '0d2d276f53ea3ba1686619cde503d9748f58a834' '8aeb7d2c3fc315e629d252cd601598a5af74bbb0' '4a43c3241ec3465a501825ecaf051e5a1d85a60b' '80416226920c21e806f93bd0930d67557f41600f' 'd3321a20b5111a66f3e68798959a347acfccbd44' 'eea84a7f0cdb693c261a7cf84bd4b3d81479c9a6' '0978e8207b61ac6d51280e5d28ccfff75d653363' 'a0db661e7d8e084e9cf3b9cdca7c6e4e66f2e849' '02a838b01b8e7c00e2efe78db06fff356a112dec' '5d5eceb9bb1050774dadc6919a258729f276fd00' '3707fd9c383fc7ae19733a3ad2e5a82bf86370a0' '7a2ff0510c51462c0a979f5006d375a2b23d46e9' '269b844239149a9bbaba66518db99ebb06554a15' '7dfc9bdde9fa20cf1ac5cbea97b0446622ca74c7' '2c2eadd07e747059ccd65e68cd1d1b23ca96b072' 'c6141ba0110f98266106699aca071fed025c3d64' 'a1462fb8b5dd1018e3477a6861822d75c6a59449' '1ff07522690d2c2b67343099d2d046e88f71cddb' 'ffe450cb6bce16eb15f6bf90b85b7e5f9bfbc1e3' '65e246d33dede0008f281d3d09b7695bef2d18eb' 'c7a6a74f847923bb726029b85a3fd0e05e9fbb04' '02467341e3577836648753a9e9a5c196f08187da' '438405704eec45c06be9adc94eb5f94855412790' '8b36447c9ae102539d82d6278971b23b20d87629' 'e1a0657c6d943528ef58671594ca7e5b17db5394' '7172d9ae29afd00c8ee9a8e3a4eba4cea5d5e403' 'b92bc4d6e21f1802a39975e3c7cc4f76f591d46f' 'de22dc76e11d1291d4f50b73dbbaa158ba9d6acd' '6db63090272768785e6bb4a3afa16650c1e96c54' '426aae69373fb149e5bbe1d5fa18299d38414f22' 'ee3cce59b1cecad7edd2022a443c8607faa9a4ad' '2cb6290a24f74f1c4a1b4cbd311ddd50a2c6046a' 'd6c08418955a7d88bd5fe18787456264c4408e22' '24056de9976dfc33801d2574c1672d91f840277a' '56e8bbb7a0d1b15a1af87fc7d6a73469f6ed4bd2' '0a22454ab2eca530702b2689858909b608953703' '5fac6c2785f95ddd73db33289dcd3cd5a68be226' 'c095b7a27529d1d18b3b36a47f77a1419f0de939' '5c06f7f3d8374df1cec3b353306a4d1032a60f44' 'b19d340d5d08c5940ce612c2a1b5fe3a8a401f9d' '1d251a7adc5b720a71641c758a45b8a119971d80' '8243a49145e59f19032b86b20d8906f05e31bdcc' '79c080c75cdd0a5ba38be039f6f9bb66ec53b0c4' 'da9146c19b1774926148ff271c4a3dc8d7891b18' 'c4b2d9643a06a5326a778c4d77d6fa60e0f3d6b1' '516493232a9b80dd4f4f6b078541cfad00973dbb' 'bf19467b8512f855bdfae59ae78d326b1f434443' 'c951b20766f019a263b3547b07627be52fff87b4' '7c5b07b497eab8eba75cf5da00cba493216dfc12' 'aecdaa84adafb086b5b2939898d781bd63d6fe2e' 'b2b6913394488e031ee3d726f247b1c967057b40' '1743dbb45b2cbe5500068900794a355a7e0dd853' '98413be56faa1c12494f43e7f77746763fa41c4a' '9e6e7e088cb78ce58ea442106b1f29cd7b6ff76e' '9bb7d7452363fc470b76766b0a6356807e752795' '17ec58ac3c08c5c43bbdf5b08020fa4188a3009a' 'c01a74844b74c584160d5253f794bbd2af015bec' 'e33d0569d7a1d041e37fb93094e70807856531c2' '836d2924c05edb06e32eeede8bc12c4c96da0b3d' 'd8c808af2a9bf731f72fcb772cf22886c6d00d99' '1af0148c3f871e55a6c4adf544af77a19fd17671' 'd2f277bf8aaed8c5307ab998b2de4346bed6e884' 'db9912ce99c346c948c8fa774c0afc7d80d0ec20' 'f0bd6cb02505eca6adbe2e3ad3445a2420637c19' '0808c1ab8d1a1222194d830870f6b2b47220b1d7' '6dd61011a67e35b8d5f3b94193ed66d0c19ba425' '7c0572197faf3b6d6b27271455e76ac8ba84c43f' 'cfb91be8f9c8e54e517a9a539012309101abcac5' '2c4a2b5d084b06e1a9fd2e85866b51f6118dd254' 'bcb896a69864aec4dd0251732a380bcdbeff8c51' 'cb1ebf6e20371208c49d59615bf4b46d92991fc4' 'c709a876b7de676d49b00b624b37d208e452cc7e' '8410a099c88d1d720c9780b0ed716e544ea5a6d2' 'b15ea10972a1b4db23f7495003fccc6fe59e44bd' '291b4eb984792fcc0bd3dec9ad9a69c3c6988951' '9ef6a439bc987753b7e5af5a926f05debe82bd1c' 'f5617b647c8597e2437b3899f520fdf65e0f277a' '6d41096d7df609992479d6a3a43bc60e21b8e165' 'd542f5bfa3e4e16aac6141abdd44bb8a2a6f0761' 'b1f5886cca25a6957b5541031376e2c06c5bd621' '79b8a705e26c08f8f09dd55f1dd56f2375973d2d' '27f5e88fdc8ab577dbff389085ae6ad41e994ae7' '1455b3857ca2d05966005f7172210f6bd00048c3' '3d5f026256d985e8b81e7657a5430a9ff14e651c' 'fd6bc2ba410bf7828dc2104bf78b51ccbb216c40' '25baeacd9c6307830e2ed9f586f81fc23d4d1002' '862123a0a41647bd130a2d0edefc76a52dc8b8f8' '69e35d9bfd6ba2837fe18bebf97ea747ceb110d5' '2d2223d742d968fec77ed056db9f158e7cb3ca94' 'edca7ad57c50483ec81ab5b74ff1d71dca62e5cb' '06d07a4f5b98c71c696fa8f8718050b656ab99ba' '697c58941c0a0d1a5ea3f323cf0231018d3ec4b3' '294a60e5e9830045c161181286d44ce669f88833' 'bed97e35786a7d0141d1ecaaace03c46b5435d75' 'ccf2a77a5d1504ca95c1ae5f37ed184e62dcd2f2' '0d4291fa3a8945d97d26a6bac8a4068f116f2885' '3f97e52562dd1ad041f63c910a746eab695f40c1' 'c8c1ab2c5cb797fe455aa18b4ab7bf39897627f6' '99239dc5147ea4678e871e5c9d068a36f154558b' '38cc5b0bed6c57367dca3725d01857fa0876899a' 'feb849404a8b677aa6760d1539acf597e4574337' '522f5021cfb5a74e9b7aa3cbf365471f7a564c0a' '68084db5e7a5eb1e4901e2158565cfc59873756d' '2725c018785d52286dd5b4ff7e087d2ff455a1a8' '35492f84fbd6d790ad7f93bffaaa6823890c103a' 'eeb25b3ca1ef57d57906295d829febbd30cf4d8d' '521c04c6e32ac110d942fa0e11bea4b91cc3241d' '597acf1a04bede55e3ad8a7922bba286c11112d3' '93b1fefd8b1a004c6c8f8c92085e7bfb694dfe98' 'abcb9a1fd89144536f3ef604f700e94424867366' 'b73c2719c951868efc15181269a3caeb99157f29' '29664312a75e47f989ad32e43682746d8681a02b' 'a02c42d41af7d66db71ca43c52531c3253ebe35e' '9c914ef3b876a6f6c0059b4f4323fc1b76fa05e4' 'c6472392301fc15a09d5435f1f89421270aed81c' '7370a8fe5bd211042610ec200dcc83de5ccc50cd' 'd4ee06219f2fffb71e2a23fc5060fdd3c7bb2cf7' 'cc49a35ab19565c5eaef070755b6fba235f9d05a' '74da545ec6a8b41de96b4c350bb59dfe45c0d822' '04ea3e0d2e10642f0a0199081e9aa8fd5e1bbea6' '7d73a1beaa9428ed4da7786725fcb1a20fd371ab' '541e0b4947a92f4bf1d60ef7e55f0a254d9c41a0' '9002421ebb1409e2f47062722aad598b561cf9eb' '5fee78e517ce0765def9387659fc56a1d5532c60' '7304d1909080ef0c9da703500a97f46c98393fcd' '0526b0b88c3092e38ba2d05f480b66bd5a1e1004' '4586b056956995754e95456312b2a9ce36c8de21' '6575dd53217ee5686d48a35f48415b113518d2a9' 'c80956630fa077646f971ff5d3e9452339742def' '22e5c40fda71d0b6cdf83af9418403808d5d06bd' '4994da5c7fea1ede9b71ae66e3b906ea56b9a929' '7f3ed7ea52f21d5b8ecc01a17fb8f7209d337cbe' 'b99c850bd41e8f6f142bb24c3c2485043b552621' 'cc8e22b6b1622f44654a9ce70c1285c15c1b8414' '0f68f56ab7be101fc949177774107769e63f13e9' '5dc6b4a351de9804932c4475a2c73c22c0b59369' 'e15abfa60107f97fd8297faad8cc3dc4eae0b5cc' '22bbcab0a2a100827a26833b7cab16ae8b1a3f9e' 'fb44bd4902cd5df526ad432015edcfaf163999e2' '6cc4d2c11537d66e9d4a7356a576f1bea6f4009f' '795aad6b179de4c3f68b18132bd183931d09c462' '711035c043b3a5116860b3a25d808572f70e1dc1' 'ed86f7b7e5f676c24ba0ddd86de6614a4b69a9e4' 'c417a7cf976eb8ecd8ebca439ec0cb0fe9ddc7ec' '47c59833c42a99bd27826f4f369bf4bb433c7ff9' '1c418cf146380031b13b6fde02f944830e5b9155' 'ad3993c449637fcec1e05bd2b63c24d34cb82243' 'e2bcc61a4481c3de4747014895cef45d701956bf' '9b9cbc6b4fa312d963f4373e88b6e27106f2051a' '8f5ae83953335d9c4c8d1cb698b87cea1ac8aeca' '9aa85f433bb1f51b599278b29b3d6224ca5147cf' '48d5e50e4fe78bf9cc5b4eca72798d4507da62fb' 'dc946ef548aeeea258b040087b88c9b7fae5cb6d' 'e5f0c2ad987b494ab94bcb1331667d189249f234' 'a06ef7754b8e6f45d78c0015c3edb2117945adfb' 'a212edb16ca0698c488c6adfa6854224666c8cc1' 'f8ca280bf5c2a3fb08890bdd212a3f3c00589f87' '952b334dcfcf641a6290b876bdc226c23772287e' 'bb0b8a07192d86b291c5b13fb64ef984930f8ea6' '90fd7bb1af1733685f0aece12dd7264d4ef68422' 'bc17eaf1b925595fb9f945ced5d70fe82ce11e78' '4869417f4a2b010e9ee00f611265f551a47e4f1a' '0c57e55719681412e87db7bb81b8255b43d6162f' '74f6e045d879414ae4c352dc7f4e8d438ea9d55d' '4d34ea6709894243d55ae6a6b63834851f9c5d6f' '1fca457c22a277ba47ae1bdd2a09d42926a5beed' '668db717850296122fa0e2aff471cd20a722e0c5' '0b74ed5533c87db1abe3967e3a370bc3046892c7' 'd17b39f6d3e635b039314726fbc66dcef286ed79' '7f15da9a55d3ba9f8c3af545246a4588102a38db' 'a018b6601c47e7d989f1fe5c175325f85dceb264' '9261d67d8bd2d9e787ceee8ff593f105bb3f5176' 'fad200733e5026b103ec2504ad3dfc2843216cc8' '85188e3bd7cb4141181f24a59f9057c38ffa37bf' 'e9d9a43e3f00b9313013b78d915a1f97dd215bf5' 'dfdc0debf1b82354e301843f8cbd16eaf05a01c6' '67f2243f2b1f1936c4dc22897289f5815a0e224a' '0ad3a7d311f0e93f2e838b4e47a7da57c501d737' 'b9dde447dd27f1b3ca21e07da1d885fd342cfa62' 'e9ab4b38205a34fffe537b4db721458b5d07066e' 'c974655b0c7f82a760bd22d9ef9db281e765a9a2' '8450fa6b16e2f46f5b880e0b80d55ab9fc4524ca' 'd3a37a664ebe57471bd7ab2486dd3072a9c07378' '461deb4911f39e455756cbc42928b12b04e82851' '2f8b07842e9e95122b848727ea73504a035e7c12' '92acd9f7409d2939e5fef8bde5ad527b9e525229' 'dee14c5b6d29886255c4a54599590d49fc1754be' '46dbe25747fca3d82e98dca488fa9be6b809d522' 'df95f0157ba1ea7b73b3f1db4abfdb4b05e0bfd9' '2f120ee8026ab9630dc7f93dd4bafdcd56c82056' '24684cc2060150afd7a1ea47c586f9c09330633c' 'ed4bef1d52ce0d6c96a86b6a470d6777034c564c' '941abe67e176a3ddbe59cd4323b13f69515f6628' '5cfb2f62242b41e2b60cadf21b28ee43cf615ec2' 'b26c604a0dcef62e7c61bd1d560c63547c9bbfe8' '4be54b6bdafad7656fd85c1fa6b7bebb7700a3d2' '24a4302478118ff1caf39fb48809c0127f608664' '6de7c4def7a6bf967d6603f7e1abda5231ccc312' '4d20a35acef6fb8c42eff953a11759e94710ba8b' 'f1205656ef2334e860ced588e76dd88119394166' 'e759aeeb1d09147891e08682df3a70dfbd15724a' '9c7cf29bdb11cfdd1b59d1ea1eb852245b26e93a' 'fc0a8ee9921f50ac23b3264846720d1d15be539e' '1a126668ab0946ebb7d1450742cd14775aa298fa' '2d5e9d40998b441485376b8729c69073d8f2ab9d' '1b16920e651d11811ca4b3a5d92cfb3d817b1a14' 'dfc6b8ccb1bb8d591cd26571e554208fc4af7d0c' 'e42ec97657fa5ee40fd2358c973d273edd7999bd' '739f4f44dc42b866090297adc1f007ffcdefb602' '3c2e63a3a0efa8c52f9fd67f58a71af48957ca7a' '5f2d29942c82d229dbdafe4bd21585d1b67f31ee' 'b89d9d26fb6cbc9f6e0aae72a2a76b5d8e5f1023' 'd21e3b442ff6401511831ae1b8be11d530f063de' '420663ae8fa2d70d2b824848763ca15bb5b2b585' '2920be2fabcb8010fefdf101d84fe0867730d925' '2281565db79b5fd6b539e73a28e73fc960ee34d4' '1b94f3874d61b34febd5ddf3482a90107dc80082' '9fde82ea39a7f52c23de366c8592d4805634f45c' '474cd6355413b264087ddc66b1dbc6c7e59fb76f' '6f8ac982806a104e4e816e12279d85440b6f703f' '042ecb2ab2361f77b34a7d3c642bd378f6ecc73a' 'f61c11db0f598eed6dd35a2d700ca54c6c74af4a' 'b3a3eda6cb30f21b818f40795468ff0a9f629990' '4042bb6e973aded1de6ce83436804a90181d6357' '739db0529c2a3ac5a0dc3e5a76a46ce80735dcfa' 'a3c86259f8a402aa050fc5f3039f94c7872e4657' '1ef8b1c830a0b5a6600d803a8bbeb7179d3ca4da' 'b865e0823cbffb747173b7dd4f4c8d82491d111f' '40213f8d5b498f5eb2f3297ee0f9c84d98737ee9' 'bd178280c7d967e87e217b51c0647a2bfdf5deec' 'ea38f63c4afdd5531fbd8f0f881594a94c4bd413' 'a1cadae42c9bc52cff24b22b0c4986be8d82ae16' '5a84cbb03094fd903ed79ca6c06e558821a69be4' '231bf041d425a086ec08231c98cf02b6fb16b169' 'e41ebb0a1f8bff63c8e333eec34ff64e748227d0' 'b50e5b9694e2a4355f2abeaa711dae5190661c27' '3165df2f130d567e6cf05d789ecc28810519e5f7' 'acac29fa62a8b738569a99da2f6458bc21aa55ae' '84f32702f3efe02c2622b9151d4e08c436249a8c' '7177a7a8e10d7722d0b9d4be4eea7dde014527b9' 'e23d68d7d3b35a44eb83d834b65cd28ca08844ec' '60143172c63daa49fef6eb9daa066fb7f1360bbe' 'f9ef0947ba848467e4dcca6b5ab3a4ff2e218df6' '0d41068ca151a6368ab4591c13e9a7a9fb92a56f' '30e03871146129acb75adac48405c203f5bdb3c2' 'b686559772d1baa28e2ad346d5a9932863d9523c' '0440f938aacf54a3e7dc67cd898f76bbd371da49' 'e7795c17b82684afb9390b8788f781c07be1a368' 'a859d2383f66002a442218bf5083faaa674bc4e4' '689e4d5fd8a76c676f04bc8916d78ca5db3130db' '5e9f822c9c683ae884fa5e71df41d1647b2876c6' 'c5c4ce6612bb25ce6d6936d8ade96fcba635da54' '6ddd1159825c516b8f64fda83177c161434141f5' '1455f0badd6345b2606bafb32e719d252293ebcd' '579a20181cf2e9ddc2f1265ee4976a0e2631fd5d' 'c173b5ee81a25e8aafb21ccdb7ab457da7783bf1' '0bd862846e7f89910252cbef8718a757950f1683' '3e706be02befae55b50b240d4360b5993f9879a8' 'd9d71a6e2d19a2f3ccebea0092b8ddc1e935886f' 'b26205e172ca035e327e49edb0c2611e5d2ede8d' '69aaab0e65e9bd7601740c1e14cc6de86dafb621' 'd0343fdb567dddaa74ac1b7b6994fd70100a0f6e' 'c143755d8cce31e770234732ff23134993b0550f' 'fd80df352ba1884ce2b62dd8d9495582308101b7' '79ed408b2402e8113aa5a298f3bb9088ede58f6c' '28c12866c22c2826ccbd8c82dc353f02ab2deea5' '825687c1662c53ecda991adf0ecfd8dd3d864043' 'e3f7caf74b795621252e3c25b4a9fb6888336ef1' 'be1e3607f29a5a182eaa70e3058aef32fd0cc4f8' 'a54a659f5cc25e3b23ab19af08d0b23488bd9f4e' 'a206376b425472c7c3a824f47a9967a4c97ae32c' '1d2e01d53a8ebfffb49e8cc656f8c85239121b26' '62142da241a08006f89b0620f7291e3a08c0a094' '7ed7065dfbbac1b5405a0c8029299847e408cf97' '1b8b6dd0c91b7db58e344f01781932458ac43da3' '55a1abd6e76ce91eb6049f32efec3a8506686748' '32fcd1b9c397ccca7fde2fcbcf4fc7e0ec8f34aa' 'dc64e1b9da22496b5867f90315ac406be041db15' 'bf1800073f4d55f08191b034c86b95881e99b6fd' 'b80fd34df2580f2c7a99e7188d68515bcf779714' '38399716e353776dca7f04dbae98a07af68f2880' '6542db20caf4987b938ed8feec07d199779823f2' '390ebb24b3c3a95e109c28e14c2ec9fe3f0f8aaa' '63d93f4d0f38fbb95a55729fbd2cc4920743931c' 'f9d4f699751f0389e57f26382174334670b8276e' 'd909b8d13a13d0197877e16aaaa3b2fcbb502858' 'ef6a24c79d5047c029577113af43eddd1d0f1bd2' 'f00b3056843d14754ac1bab2106cf5599680f115' '22254fca9bc7655801ad5f2af15729e44d28b85c' '3e7b375752b5e4de56e92dfb9c43309cd985b869' '7d87bde21c73731ddaf15e572020f80999c38ee3' '1c4749873bd0f769a47372636a428484e7035f59' 'c1e42ec04197ac013d049dde40d9c72cf543b5f6' '8fd0e127d8da856e34391399df40b33af2b307e0' '5a09e179024e76afdf9ad3a6ae767b4e06884ea8' 'a5a3de8990f47f4c54ca5daeeea8ff7daa42f9de' '4c32ebcc8650ce506632a32136993c85537fb01a' '76e013152891a69dfe68a28706a51a7df9ed4c42' '10188a25c9b5944c0a912482011b484b7c2e22d4' '28feec15fa285e561c626b3490bc5a10f5d177c8' '0dffacbbf8d044456d50c893adb9499775c489f4' '1877c3e7937fb2b9373ba263a4900448d50917b7' 'a4217a03686989c4a79530fe54fa17576aff7330' 'a9409fcb979eaff401837b955b234ca1ee05fdbd' '81eb3a2bd273b84fa9808e6b13b533f9c55e16eb' 'c321a4d705a31a50d7580516422aaa5b853e7602' '8c6ede5cc4226fd841f252d02ab0372cb92ee75c' '4c43a930e3e165ca6890147a309508ccb6768faf' '758beab0252912395efb79f34095c5ae7e3e58b1' '18311a766c587fc69b1806f1d5943305903b7e6e' '2fa56dae1a65e8124d417a31d7b02c37df013817' '91b75129149429bb16927cda8b5642c04c59e6b0' '99e297cdd338b8a18c986ed4e088676579b7fe96' 'a103b833ac3806b816bc993cba77d0b17cf801f1' '10efa807929084a8a1c38655942a3bf83bce587a' '88e09306b7e0f8a9e9f9c729ac13ccd11ed9679d' 'a21cad9312767d26b5257ce0662699bb202cdda1' 'b47834ee4485bbdcc6d36f086ff61c3efd8870d4' '64899904d6103500ad01be7b763298dc939285ae' 'f3bfa0f07976a7996b6dedba21d2e0d164f08ce8' '2e2f89b184644f0e29f1ec0b4dcfd0361d2635cb' '42ae6e2559e63c2d4096b698cd47aaeb974436df' 'cb15abd47806b449e853caf43f41573c4c82fed3' '66d8e76e8e85a30fbf9809837e07e15a8c5ccb8b' 'c8d08464bce947ee060e0174a3f4e87503269d0c' 'f120cf33d2325fd95d063eccbff2e86ffc7f493a' '67ebf71236f2e7b0e4cf791700dcddc9eb8cf650' '40d05927830227f2a1701c61e8bbe65287a03490' 'e211adcf36d0ccdd31af7398af4725a47d74b3d4' '135c6af1cac5465529469700d16c0c44b24ce317' 'a261d77fec147b9974aacca8ae8f0693feede838' '8f969537149d672d40a0e75a83f39451a5402780' 'c893ee3f95f16fcb98da934d61483d0b7d8ed568' 'd1a09c610027e446ed30c21f61c2f2443bf92a3f' 'a78f244a9150da0878a37a1b59fb0608b1ccfb9d' 'b20be2c77ce5341ded1a2d8aec119f6dca8ef1ad' '5d9fca12f54d3e25e02521aa8f3ec5d53759b334' '0770b7cc095e015af302f0758d3d85c7f17c719a' '3f02dedf1566858736f351a8d4a3ce91375e48f1' 'e0f421d73053eaeb441aa77054b75992705656c7' '5c7e4c4da8586d2ef55a11a9f4df626b8ea9a146' '783db6851c1821d8b983ffb12b99c279ff64f2ee' '9dc016eaba3a70febcd1db5f1a0beeb7430166aa' '9f25b6f2568d50c247a8e3b031a0a5caee8c17d2' 'e08fe24c34d37d00e84009f2fb4c35f5978041e6' '735049b801cf3d597752017385cfc8768ce44303' '7e1caa679686dde5c24d60b139f234568045758f' '6b06755af6679fd7c98ebc017ac31c8a74127538' '1c3b5f37409682184669457a5bdf761268eafbe5' 'f37f1748564ac51d32f7588bd7bfc99913ccab8e' 'bebe0afb74514ae51f4f348b28326c658b02209d' 'd64c4c3d1c578f98d70db1c5e2535b47adce9d07' '42da18e62652b58ba5ecd1524c146b202cda9bb7' '40b1f89a1691c4b7740bec2c868f1e4c60346353' '3aebbcba4baaa81bc8c83f2229ed8e774cf40618' '1248d29464cc682c2a1793cfc5d4ebeb374c6738' '08a66f55f7246d477b19620a953476dfc02beefc' '238c863eb3d3c6ed58493bacfd1f4b36bdcfa92f' '257a060fe219bb0dcb98f12ce34f04eca6d08352' '7f1186a8d738661b941b298fd6d1d5725ed71428' '11c1967f1a796bf2ff56a7118147f1d39d9f5ee0' '0c4a06395156d16ea33e959fccea84e4cfec04c4' '74e0fcbd705d4277267311f8f26a00bb8ce93820' '994719ed6d81a6f4677875ab6730254c0bc484ea' 'ae575d2145d1a2c8bb5d2835d7d54751f3b0bace' '828c0aa63706410503526d0ee522b9ac3232c86b' 'f22ba3561daa792dd138ed543e0bf48efe0b999c' 'ad0fbcebb5f6e093d433a0873758a2778d747eb8' 'e957c96455e8f4c630d5e374312cad0633ca7e17' 'd795a052b0ddad3da83dda6ff522c1b1aaa4a525' '91931af18bd22437e08e2471f5484d6fbdd8ab93' 'ff4d4158ef9143327a42f7be4298751cb0d1be69' 'fcd7ace9a725ae034ff9f24cb94c9fe12a1f02da' '21aa330fec31bb530a4ef6c9555fb157d0711112' 'ad1212a9cc24b740b2711014933fac6ace32aa2d' 'f46eb2bfb878ce3345725252f77fa3ba36a0f087' 'c5528214c7c0a753c908a7b353309ba665985fb4' 'e97d06cb4386af4e069a2dc713de70500538d0bd' 'd1541caab053cf94b114582a23b51a8cb90f4a46' '3c331bdeececb629669961a80c0f929301c088d2' '330cbb40bb3664a18a19760bd6dc6003d6624041' '447c98c1ca4a4b0d43be99f76c558c09956484f3' '5132681dcd96b2a8c357b6e5d93e9876924bb80b' '005859a2cf7aa349fbbfe433ab1769b15c535b72' '700a281905f2a4ccf6f3b2d3cd6985e034b4b021' '563e40153a56cbfae8721f9591022df5d930f939' '629dd55cf77bd3a8f80049150d3c05fef6d3b468' '651e0ed391b148f83afba0bfbd8a56e38e58c34d' '07e3e514dd385300bd08da4a8df09240d272821e' 'd7231be4b4657e5f922a4c6dc11e8dffc71fee87' 'f98d42000216677d177384f202ff1cc896a7395f' '645753d01356ff1a756812f1c69c53eb5c9081cd' '5a19e1985d014fab9892348f6175a19143cec810' '896530b7b0c08ee8b3296d5f012bfe1b0a979b86' 'ebb398ae1e052c4245b7bcea679fe073111db2ce' '5c93b20f6de4478e1fbcfb38eb46738bca74180e' 'f87c2a275033120e15213f3d65234d98e726c4b7' '19f6748abbab8523a7b32a5e371e39d4d8d4aba5' '42b144cb6a2d87385fa0b124c975d6cf1e3ec630' '8e02d188698851436f76038ea998b726193d1b10' 'e1101373df5cd7672d988bb4e9cdd5eb97003165' '9ee6d50ae4b0fe14ed70a5265a05874d41e10848' '9da195880f167ab7c2d595388decf783c9920121' '64fb5af1d1bbcf1b808e9bb092b22fa1b691ae63' '45e02edd8422b6c4a511f38403dbd805cd139733' 'e80b8e5c53c30df1cba45258d10b04872b7eea67' '6cf5df1040ba0694aea6a5edc6f31811a442ea36' '83f37ba7b76ab17e029ab4127ec64ccccce64c00' '996bf834d0b61cb5a1389356c1ed7db1230139d7' '43d6140cedad9f031b47dfde6f85856e007b3f04' '491628388005a26c02d6827e649284357daec213' '187150671d83324f1ca56f7ab5e00f16a3b9f2a9' '1c35755f46423150e19ff57448786b4bb48fdb46' 'fcb754602724fa2a1d0db72f13ddc3ef0306f911' 'd0252b0b945ec67fd09fc764dcadf445fb7757ee' '31e3100d5e1fe69f944f84867be0cbfa5fd380c8' '0b6914a0121b4c9fc8f575b60a5dd43b74612908' '0eb8f83c055cb3461734710d1b1ce2dd4f01806e' '852c0b7204ded184924c41ab99b2ac7a70ad4dab' '4b36a47e2d989b98953dbfb1e97da0f0169f5086' '3898b189079c85735f57759b0d407518c01c745e' 'c878d5c1a525b88807d9d79888fe8340bcbf1aa3' '4bb5b6f13fd83b32c8a93fbd399e7558415d1ce0' 'fde277dbcf53be685d0b9976d636366c80a74da8' '91f505dc3a94c04421a2a51e8c40acf7ea67ecbc' 'e2ceac2f323625632f12dd5333092976298a0cde' '552f66c40134542f15d4302837e7d581a0b8e217' '638ad2bdb2f994c8bd99cc40e0c4796a8617ccf3' '7c0ea26c57b0bb72d503fe27d6533f5addc5e3a3' '0a27b2d7a224326fab543ca586d501fe1857b655' '4516be370ced14c4fb454fd6cc016e47bffe109e' '6547577e94ae3d9f8ff30d3267fe7ec394e3b20d' '605aab3b3ca83f58681841b2dd16d4a7baefde6c' '0fa0843db17ccd427fc7a23d313aafa88fc89e04' 'db746fff89a14419379226ce0df8b94f472cf38c' 'f1e91acacf86fb2cd7478af490326cb9aa63e8ae' 'a23ff143804d3b8c27157ffa19e48b4e22939115' 'f0703ce627a25b4a1307d8a92cfd6d6bf7e27e7a' '46ab7d80ed4f378e02cb249bd49a76026a2d683f' 'f2d161e5804d8da070988624b9edd179ef31b478' '6b8f162bd3fa82c3c1b3653100d04172c1dbd8a5' '153dbf4adad0082d030c30d20541df2b1af52db6' '96dd187c93afe0ae0535276a92ed488759ace5a2' 'cb161c333927142818d6bf22a4da2b023fb2b8c9' '583348bd65ceaf4a5067a6267dd236929e1b4b37' '5ea46b4360791345bd0bf4c7bf8fff5151374ea1' '0e9a970d7b2cb98d741bc0e32ad8c8f30c009c63' 'd959fed68e4d45ee80cbdd62976bda8da52ab8b1' '2466b62268c020606d20b45e007c166399e639ee' '0a7c85b516830c0bb088b0bdb2f2c50c76fc531a' 'c06c4f7cbea1d8dc71485bfddef2849a1b721e67' 'ecfcee245cc99def0f6bf84ac75ac372f8ab65eb' '4c7518062d638837cea915e0ffe30f846780639a' '3f78762d17701f0435ad958b2821dc3243ff34b3' '943116ba2a6ab472e8ad2d1e57a3f10f13485cc2' '062b7ef6b103dcbcb3c084e8ace8e74e260b2346' '9bbbf33a5ab84c0f3643f43350b0f473b60af5b8' 'a0ef5b4b101424b8a666ed56bf1717dafe2d37f5' '2d7395b23dbf4c2d60be49b73e4c4705fc446662' 'be61cd4242e4a53f5cf989ee7573121d041444bc' '72826381215e2f9d2bd2f32f63f76a80942b7fdf' '7796c97df6b1b2206681a07f3c80f6023a6593d5' '78e66dd5f32a1a8e5ee6decadd4e4dffa7d2c40d' '860693187c597645b28a421d8acb26428b8afd3f' '169ec0a541aac8afb215ab591b0fd53276686014' '8d83282e53185ec257a4ce08812e8fabee2c7212' '4d2ea16576c8aa1437048cf436bff85653f139fe' '74a0ca4c7f19f1b273d665b3b53f7ae8af879658' 'b3d993c7566fed1c027c5c18f3ef482ba8e6307a' '215705db51eb23052c73126d2efb6acbc2db0424' '185ac20a7b055e025027d303b63dab456b4f5d5e' 'c108905a7423d44237d17374f845fc5bb9cb9728' '6603c5133daadbb3277fbd93be0d0d5b8ec928e8' '3f75771987f32a9f512c8944e70e343f8c6d71c1' '678681828bf4abfd3c31f36390d2097682141d11' '25fac20edd09b60651eabcc57c187b1277f43d08' 'e27c125040b1e1f26d910b46daabbe55e67fdf3b' '8478dadc8148af311c3d43d4867cfb6632686ede' 'e3cd85963a20d2b92e77046a8d9f0777815f1f71' '652ffad172d089acb1a20e5fde1b66e687832b06' '8418753187ba216f8931432dd8a6ee2f23977ecd' 'b2f10aa2eb18d289e48097e0ed973e714322175b' 'fb6ec1d27608c008bfe1ab0dfec3720990eb2451' '4a91fe4c0d683c56044579fb263c660f5d18efac' 'e92f042642aed6f6206caace892d9df2d0166841' '1a4a5a752fcd60797ed2cb7c06253c6433d13f63' '6eab7034579917f207ca6d8e3f4e11e85e0ab7d5' '78683c25c80e54bf3e8015fdfb8cba2fcd03daa5' 'cbe37a4d2b3c25d2e2a94097e09b6d87461b8833' '79ebb596201c86712fe38b0ef73d25d07b932664' '7d92a38d67e5d937b64b20aa4fd14451ee1772f3' 'f0173cbe7fa79eafbdf32eed32337209f84ddacd' 'e995c51903384be1c7aead246dc30cb5244179ac' '320155a61f7fc810a915644e9e2a451bdcea90b1' '26a756fc10fac6f133ef47f12362a39769dfe24d' '856366dc924a9561dae39f252b45dfd6cc6895ce' '299ce4beaf714abe76e3ad106f2e745748f693e9' 'a05143a8f713d9ae6abc41141dac52c66fca8b06' '3c32a4386909e8023b3c49253fec33d267be16bb' 'f9a5c4b6afc79073491acdab7f1e943ee3a19fbb' '4343af66b8e1df1d3a2e6f1f8612506cb45b2afd' 'dc561ab16d8be9cbe8f07a49a7b2f5428fbcfeea' 'b9fb91692af881736f8fa1741fa0dbadf07d99ee' 'c9e9aa80022c6db71bc097a621a6145f39aa0ade' '9b32c86e40da792544c53076f5ec43f115e56687' 'd61009bd578ee7381a3cce5c506190ecb8f9d6e8' 'f5aab0438ef17f01c5ecd25e61ae6a03f82a4586' 'd2ead60d853189f8e5ec6b301fac1e60e0b4b47d' 'c1ac98492d1584d31f335d233a5cd7a4d4116e5a' 'ba54629287f58b22c1d37f80f1875373e4b51ea6' '89785306453ce6d949e783f6936821a0b7649ee2' 'c73be62caabbec6629689c705aea65e5ce364d5d' 'b5ec74c2aec76fbdff9bc16951455602e11902bf' '7ed1b265021dd13ce5619501b388e489ddc8e204' '5a6a461079decea452fdcae955bccecf92e07e97' '19d022d67d7353f0e6e9ba255435d3de93862ac4' '5b4288792ff246cf2bda0c81cebcc02d1f631ca3' 'f9cbf56b0a1966d977df87d15a5bdbff2c342062' '995cf0e014b0144edf1125668a97c252c5ab775e' '3ce6f4f943ddd9edc03e450a2a0d89cb025b165b' 'f76ad354146d773d4cad436bb9004d230bffd6dd' '02d4a97ce30c0494ce6a614cd54d583caa0f8016' '5e36be5973b6ac66198220365bffb7a3641038f9' '26d6fd81916e62d2b0568d9756e5f9c33f0f9b7a' '7e17e80c3a7eb2734795f66ba946f933412d597f'
# bad: [eea255893718268e1ab852fb52f70c613d109b99] Add linux-next specific files for 20250311
git bisect bad eea255893718268e1ab852fb52f70c613d109b99
# bad: [21b9e91ad0d8b7af26c672e73f02f786580d0821] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git
git bisect bad 21b9e91ad0d8b7af26c672e73f02f786580d0821
# bad: [c33b43555a71ff56ab56b4e6a6d7af564b1f471f] Merge branch 'perf-tools-next' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git
git bisect bad c33b43555a71ff56ab56b4e6a6d7af564b1f471f
# bad: [9571d285ee2a042d4c23def223a5821d928e3cb2] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
git bisect bad 9571d285ee2a042d4c23def223a5821d928e3cb2
# bad: [f122ed30288bc440d16c3daeb80295c666aabe29] Merge branch 'fs-next' of linux-next
git bisect bad f122ed30288bc440d16c3daeb80295c666aabe29
# bad: [f9d0f6a766b047038cbda245074792176ac5ab19] Merge branch 'next' of https://git.linaro.org/people/jens.wiklander/linux-tee.git
git bisect bad f9d0f6a766b047038cbda245074792176ac5ab19
# bad: [2a99396016d983cc7ed3d0bffda1478bc07d5bec] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
git bisect bad 2a99396016d983cc7ed3d0bffda1478bc07d5bec
# bad: [c33b43555a71ff56ab56b4e6a6d7af564b1f471f] Merge branch 'perf-tools-next' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git
git bisect bad c33b43555a71ff56ab56b4e6a6d7af564b1f471f
# bad: [5aad1c83f92277e7ce9fe8793d42c388514638e2] foo
git bisect bad 5aad1c83f92277e7ce9fe8793d42c388514638e2
# bad: [8d9b729b3438703296d4a4f9ccc632dcb799056c] selftests/mm: add tests for folio_split(), buddy allocator like split
git bisect bad 8d9b729b3438703296d4a4f9ccc632dcb799056c
# good: [3f655316878130a97f835c3712346cbb4a80f990] mm/damon/sysfs-schemes: return error when for attempts to install filters on wrong sysfs directory
git bisect good 3f655316878130a97f835c3712346cbb4a80f990
# bad: [bcab1e6f685b1ad5a689bdc74d44d48c2c2738d2] mm/damon/sysfs: remove damon_sysfs_cmd_request_callback() and its callers
git bisect bad bcab1e6f685b1ad5a689bdc74d44d48c2c2738d2
# good: [03d1f3409023bcf340e2090d05b2ac4ae606c41b] s390: make setup_zero_pages() use memblock
git bisect good 03d1f3409023bcf340e2090d05b2ac4ae606c41b
# bad: [7fc29589c8529696ad1349b14afc23284f1aecee] arch, mm: make releasing of memory to page allocator more explicit
git bisect bad 7fc29589c8529696ad1349b14afc23284f1aecee
# bad: [fe7e7f9c702bf45fb8a14c47099b3766a6fc7c39] arch, mm: set high_memory in free_area_init()
git bisect bad fe7e7f9c702bf45fb8a14c47099b3766a6fc7c39
# good: [20ffecb95d1cfe7fd89208ec3783c23d56307e22] arch, mm: set max_mapnr when allocating memory map for FLATMEM
git bisect good 20ffecb95d1cfe7fd89208ec3783c23d56307e22
# first bad commit: [fe7e7f9c702bf45fb8a14c47099b3766a6fc7c39] arch, mm: set high_memory in free_area_init()

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 17:51   ` Mark Brown
@ 2025-03-11 21:06     ` Mike Rapoport
  2025-03-11 21:33       ` Mark Brown
  2025-03-11 21:59     ` Russell King (Oracle)
  1 sibling, 1 reply; 31+ messages in thread
From: Mike Rapoport @ 2025-03-11 21:06 UTC (permalink / raw)
  To: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

Hi Mark,

On Tue, Mar 11, 2025 at 05:51:06PM +0000, Mark Brown wrote:
> On Thu, Mar 06, 2025 at 08:51:20PM +0200, Mike Rapoport wrote:
> > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > 
> > high_memory defines upper bound on the directly mapped memory.
> > This bound is defined by the beginning of ZONE_HIGHMEM when a system has
> > high memory and by the end of memory otherwise.
> > 
> > All this is known to generic memory management initialization code that
> > can set high_memory while initializing core mm structures.
> > 
> > Remove per-architecture calculation of high_memory and add a generic
> > version to free_area_init().
> 
> This patch appears to be causing breakage on a number of 32 bit arm
> platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
> die on boot with no output, a bisect with qemu points at this commit and
> those for physical platforms appear to be converging on the same place.

Can you share how this can be reproduced with qemu?

-- 
Sincerely yours,
Mike.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 21:06     ` Mike Rapoport
@ 2025-03-11 21:33       ` Mark Brown
  2025-03-11 21:41         ` Geert Uytterhoeven
                           ` (2 more replies)
  0 siblings, 3 replies; 31+ messages in thread
From: Mark Brown @ 2025-03-11 21:33 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger, Russell King,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86


[-- Attachment #1.1: Type: text/plain, Size: 1530 bytes --]

On Tue, Mar 11, 2025 at 11:06:56PM +0200, Mike Rapoport wrote:
> On Tue, Mar 11, 2025 at 05:51:06PM +0000, Mark Brown wrote:

> > This patch appears to be causing breakage on a number of 32 bit arm
> > platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
> > die on boot with no output, a bisect with qemu points at this commit and
> > those for physical platforms appear to be converging on the same place.

> Can you share how this can be reproduced with qemu?

https://lava.sirena.org.uk/scheduler/job/1184953

Turns out it's actually producing output on qemu:

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 6.14.0-rc6-next-20250311 (tuxmake@tuxmake) (arm-linux-gnueabihf-gcc (Debian 13.3.0-5) 13.3.0, GNU ld (GNU Binutils for Debian) 2.43.1) #1 SMP @1741691801
[    0.000000] CPU: ARMv7 Processor [414fc0f0] revision 0 (ARMv7), cr=10c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
[    0.000000] OF: fdt: Machine model: linux,dummy-virt
[    0.000000] random: crng init done
[    0.000000] earlycon: pl11 at MMIO 0x09000000 (options '')
[    0.000000] printk: legacy bootconsole [pl11] enabled
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 64 MiB at 0x00000000

- I'd only been sampling the logs for the physical platforms, none of
which had shown anything.

(you dropped me from the CCs BTW!)

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 21:33       ` Mark Brown
@ 2025-03-11 21:41         ` Geert Uytterhoeven
  2025-03-12 15:26           ` Mark Brown
  2025-03-11 21:44         ` Russell King (Oracle)
  2025-03-11 22:05         ` Russell King (Oracle)
  2 siblings, 1 reply; 31+ messages in thread
From: Geert Uytterhoeven @ 2025-03-11 21:41 UTC (permalink / raw)
  To: Mark Brown
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86, Mike Rapoport

Hi Mark,

On Tue, 11 Mar 2025 at 22:33, Mark Brown <broonie@kernel.org> wrote:
> On Tue, Mar 11, 2025 at 11:06:56PM +0200, Mike Rapoport wrote:
> > On Tue, Mar 11, 2025 at 05:51:06PM +0000, Mark Brown wrote:
> > > This patch appears to be causing breakage on a number of 32 bit arm
> > > platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
> > > die on boot with no output, a bisect with qemu points at this commit and
> > > those for physical platforms appear to be converging on the same place.
>
> > Can you share how this can be reproduced with qemu?
>
> https://lava.sirena.org.uk/scheduler/job/1184953
>
> Turns out it's actually producing output on qemu:
>
> [    0.000000] Booting Linux on physical CPU 0x0
> [    0.000000] Linux version 6.14.0-rc6-next-20250311 (tuxmake@tuxmake) (arm-linux-gnueabihf-gcc (Debian 13.3.0-5) 13.3.0, GNU ld (GNU Binutils for Debian) 2.43.1) #1 SMP @1741691801
> [    0.000000] CPU: ARMv7 Processor [414fc0f0] revision 0 (ARMv7), cr=10c5387d
> [    0.000000] CPU: div instructions available: patching division code
> [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
> [    0.000000] OF: fdt: Machine model: linux,dummy-virt
> [    0.000000] random: crng init done
> [    0.000000] earlycon: pl11 at MMIO 0x09000000 (options '')
> [    0.000000] printk: legacy bootconsole [pl11] enabled
> [    0.000000] Memory policy: Data cache writealloc
> [    0.000000] efi: UEFI not found.
> [    0.000000] cma: Reserved 64 MiB at 0x00000000
>
> - I'd only been sampling the logs for the physical platforms, none of
> which had shown anything.

Hangs that early need "earlycon", which the qemu boot above does have.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 21:33       ` Mark Brown
  2025-03-11 21:41         ` Geert Uytterhoeven
@ 2025-03-11 21:44         ` Russell King (Oracle)
  2025-03-11 22:05         ` Russell King (Oracle)
  2 siblings, 0 replies; 31+ messages in thread
From: Russell King (Oracle) @ 2025-03-11 21:44 UTC (permalink / raw)
  To: Mark Brown
  Cc: Mike Rapoport, Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

On Tue, Mar 11, 2025 at 09:33:29PM +0000, Mark Brown wrote:
> On Tue, Mar 11, 2025 at 11:06:56PM +0200, Mike Rapoport wrote:
> > On Tue, Mar 11, 2025 at 05:51:06PM +0000, Mark Brown wrote:
> 
> > > This patch appears to be causing breakage on a number of 32 bit arm
> > > platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
> > > die on boot with no output, a bisect with qemu points at this commit and
> > > those for physical platforms appear to be converging on the same place.
> 
> > Can you share how this can be reproduced with qemu?
> 
> https://lava.sirena.org.uk/scheduler/job/1184953
> 
> Turns out it's actually producing output on qemu:
> 
> [    0.000000] Booting Linux on physical CPU 0x0
> [    0.000000] Linux version 6.14.0-rc6-next-20250311 (tuxmake@tuxmake) (arm-linux-gnueabihf-gcc (Debian 13.3.0-5) 13.3.0, GNU ld (GNU Binutils for Debian) 2.43.1) #1 SMP @1741691801
> [    0.000000] CPU: ARMv7 Processor [414fc0f0] revision 0 (ARMv7), cr=10c5387d
> [    0.000000] CPU: div instructions available: patching division code
> [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
> [    0.000000] OF: fdt: Machine model: linux,dummy-virt
> [    0.000000] random: crng init done
> [    0.000000] earlycon: pl11 at MMIO 0x09000000 (options '')
> [    0.000000] printk: legacy bootconsole [pl11] enabled
> [    0.000000] Memory policy: Data cache writealloc
> [    0.000000] efi: UEFI not found.
> [    0.000000] cma: Reserved 64 MiB at 0x00000000
> 
> - I'd only been sampling the logs for the physical platforms, none of
> which had shown anything.
> 
> (you dropped me from the CCs BTW!)

That's because your emails contain a "Mail-Followup-To:" header.

Please read:

https://datatracker.ietf.org/doc/html/draft-ietf-drums-mail-followup-to-00.txt

particularly 2.4.

In effect, by including this header, you asked to be dropped.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 17:51   ` Mark Brown
  2025-03-11 21:06     ` Mike Rapoport
@ 2025-03-11 21:59     ` Russell King (Oracle)
  2025-03-12  6:34       ` Mike Rapoport
  1 sibling, 1 reply; 31+ messages in thread
From: Russell King (Oracle) @ 2025-03-11 21:59 UTC (permalink / raw)
  To: Mark Brown
  Cc: Mike Rapoport, Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

On Tue, Mar 11, 2025 at 05:51:06PM +0000, Mark Brown wrote:
> On Thu, Mar 06, 2025 at 08:51:20PM +0200, Mike Rapoport wrote:
> > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > 
> > high_memory defines upper bound on the directly mapped memory.
> > This bound is defined by the beginning of ZONE_HIGHMEM when a system has
> > high memory and by the end of memory otherwise.
> > 
> > All this is known to generic memory management initialization code that
> > can set high_memory while initializing core mm structures.
> > 
> > Remove per-architecture calculation of high_memory and add a generic
> > version to free_area_init().
> 
> This patch appears to be causing breakage on a number of 32 bit arm
> platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
> die on boot with no output, a bisect with qemu points at this commit and
> those for physical platforms appear to be converging on the same place.

I'm not convinced that the old and the new code is doing the same
thing.

The new code:

+       phys_addr_t highmem = memblock_end_of_DRAM();
+
+#ifdef CONFIG_HIGHMEM
+       unsigned long pfn = arch_zone_lowest_possible_pfn[ZONE_HIGHMEM];
+
+       if (arch_has_descending_max_zone_pfns() || highmem > PFN_PHYS(pfn))
+               highmem = PFN_PHYS(pfn);
+#endif
+
+       high_memory = phys_to_virt(highmem - 1) + 1;

First, when CONFIG_HIGHMEM is disabled, this code assumes that the last
byte of DRAM declared to memblock is the highmem limit. This _could_
overflow phys_to_virt() and lead to an invalid value for high_memory.

Second, arch_zone_lowest_possible_pfn[ZONE_HIGHMEM] is the _start_ of
highmem. This is not what arch code sets high_memory to - because
the start of highmem may not contiguously follow on from lowmem.

In arch/arm/mm/mmu.c, lowmem_limit is computed to be the highest + 1
physical address that lowmem can possibly be, taking into account the
amount of vmalloc memory that is required. This is used to set
high_memory.

We also limit the amount of usable RAM via memblock_set_current_limit()
which memblock_end_of_DRAM() doesn't respect.

I don't think the proposed generic version is suitable for 32-bit arm.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 21:33       ` Mark Brown
  2025-03-11 21:41         ` Geert Uytterhoeven
  2025-03-11 21:44         ` Russell King (Oracle)
@ 2025-03-11 22:05         ` Russell King (Oracle)
  2 siblings, 0 replies; 31+ messages in thread
From: Russell King (Oracle) @ 2025-03-11 22:05 UTC (permalink / raw)
  To: Mark Brown
  Cc: Mike Rapoport, Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

On Tue, Mar 11, 2025 at 09:33:29PM +0000, Mark Brown wrote:
> [    0.000000] Booting Linux on physical CPU 0x0
> [    0.000000] Linux version 6.14.0-rc6-next-20250311 (tuxmake@tuxmake) (arm-linux-gnueabihf-gcc (Debian 13.3.0-5) 13.3.0, GNU ld (GNU Binutils for Debian) 2.43.1) #1 SMP @1741691801
> [    0.000000] CPU: ARMv7 Processor [414fc0f0] revision 0 (ARMv7), cr=10c5387d
> [    0.000000] CPU: div instructions available: patching division code
> [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
> [    0.000000] OF: fdt: Machine model: linux,dummy-virt
> [    0.000000] random: crng init done
> [    0.000000] earlycon: pl11 at MMIO 0x09000000 (options '')
> [    0.000000] printk: legacy bootconsole [pl11] enabled
> [    0.000000] Memory policy: Data cache writealloc
> [    0.000000] efi: UEFI not found.
> [    0.000000] cma: Reserved 64 MiB at 0x00000000

If that CMA address is correct, then it's wrong. virt machines start
DRAM at 0x40000000. This is a small memory VM:

[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000040000000-0x0000000045ffffff]
[    0.000000]   HighMem  empty

and this is a larger memory VM:

[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000040000000-0x000000006fffffff]
[    0.000000]   HighMem  [mem 0x0000000070000000-0x000000007fffffff]

Neither have CMA enabled (it's not necessary for a VM).

On a real platform where CMA and highmem is enabled, then:

[    0.000000] cma: Reserved 16 MiB at 0x4f000000 on node -1
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000010000000-0x000000003fffffff]
[    0.000000]   HighMem  [mem 0x0000000040000000-0x000000004fffffff]

So that "cma:" line you are seeing is indicating that something is very
very wrong - it should definitely not be zero.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 21:59     ` Russell King (Oracle)
@ 2025-03-12  6:34       ` Mike Rapoport
  0 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-12  6:34 UTC (permalink / raw)
  To: Russell King (Oracle)
  Cc: Mark Brown, Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Heiko Carstens,
	Helge Deller, Huacai Chen, Ingo Molnar, Jiaxun Yang,
	Johannes Berg, John Paul Adrian Glaubitz, Madhavan Srinivasan,
	Matt Turner, Max Filippov, Michael Ellerman, Michal Simek,
	Palmer Dabbelt, Peter Zijlstra, Richard Weinberger,
	Stafford Horne, Thomas Bogendoerfer, Thomas Gleixner,
	Vasily Gorbik, Vineet Gupta, Will Deacon, linux-alpha,
	linux-kernel, linux-snps-arc, linux-arm-kernel, linux-csky,
	linux-hexagon, loongarch, linux-m68k, linux-mips, linux-openrisc,
	linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh,
	sparclinux, linux-um, linux-arch, linux-mm, x86

On Tue, Mar 11, 2025 at 09:59:32PM +0000, Russell King (Oracle) wrote:
> On Tue, Mar 11, 2025 at 05:51:06PM +0000, Mark Brown wrote:
> > On Thu, Mar 06, 2025 at 08:51:20PM +0200, Mike Rapoport wrote:
> > > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > > 
> > > high_memory defines upper bound on the directly mapped memory.
> > > This bound is defined by the beginning of ZONE_HIGHMEM when a system has
> > > high memory and by the end of memory otherwise.
> > > 
> > > All this is known to generic memory management initialization code that
> > > can set high_memory while initializing core mm structures.
> > > 
> > > Remove per-architecture calculation of high_memory and add a generic
> > > version to free_area_init().
> > 
> > This patch appears to be causing breakage on a number of 32 bit arm
> > platforms, including qemu's virt-2.11,gic-version=3.  Affected platforms
> > die on boot with no output, a bisect with qemu points at this commit and
> > those for physical platforms appear to be converging on the same place.
> 
> I'm not convinced that the old and the new code is doing the same
> thing.
> 
> The new code:
> 
> +       phys_addr_t highmem = memblock_end_of_DRAM();
> +
> +#ifdef CONFIG_HIGHMEM
> +       unsigned long pfn = arch_zone_lowest_possible_pfn[ZONE_HIGHMEM];
> +
> +       if (arch_has_descending_max_zone_pfns() || highmem > PFN_PHYS(pfn))
> +               highmem = PFN_PHYS(pfn);
> +#endif
> +
> +       high_memory = phys_to_virt(highmem - 1) + 1;
> 
> First, when CONFIG_HIGHMEM is disabled, this code assumes that the last
> byte of DRAM declared to memblock is the highmem limit. This _could_
> overflow phys_to_virt() and lead to an invalid value for high_memory.
> 
> Second, arch_zone_lowest_possible_pfn[ZONE_HIGHMEM] is the _start_ of
> highmem. This is not what arch code sets high_memory to - because
> the start of highmem may not contiguously follow on from lowmem.
> 
> In arch/arm/mm/mmu.c, lowmem_limit is computed to be the highest + 1
> physical address that lowmem can possibly be, taking into account the
> amount of vmalloc memory that is required. This is used to set
> high_memory.
> 
> We also limit the amount of usable RAM via memblock_set_current_limit()
> which memblock_end_of_DRAM() doesn't respect.
> 
> I don't think the proposed generic version is suitable for 32-bit arm.

Unless I'm missing something, both memblock.current_limit and start of
ZONE_HIGHMEM are set to arm_lowmem_limit which will be different from
memblock_end_of_DRAM() only for machines with more than nearly 4GiB of RAM
and those will supposedly use HIGHMEM anyway.

But this does not matter anyway because failures Mark reported happen
because 32-bit arm uses high_memory before mem_init() and that what causes
the hangs. 

Here's the fix I have, I'll send v2 shortly.

diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index e492d58a0386..f02f872ea8a9 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1250,6 +1250,8 @@ void __init adjust_lowmem_bounds(void)
 
 	arm_lowmem_limit = lowmem_limit;
 
+	high_memory = __va(arm_lowmem_limit - 1) + 1;
+
 	if (!memblock_limit)
 		memblock_limit = arm_lowmem_limit;
 
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c
index 65903ed5e80d..1a8f6914ee59 100644
--- a/arch/arm/mm/nommu.c
+++ b/arch/arm/mm/nommu.c
@@ -146,6 +146,7 @@ void __init adjust_lowmem_bounds(void)
 	phys_addr_t end;
 	adjust_lowmem_bounds_mpu();
 	end = memblock_end_of_DRAM();
+	high_memory = __va(end - 1) + 1;
 	memblock_set_current_limit(end);
 }
 
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 545e11f1a3ba..0aef4bef93c4 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1765,14 +1765,20 @@ static bool arch_has_descending_max_zone_pfns(void)
 
 static void set_high_memory(void)
 {
+	unsigned long pfn = arch_zone_lowest_possible_pfn[ZONE_HIGHMEM];
 	phys_addr_t highmem = memblock_end_of_DRAM();
 
-#ifdef CONFIG_HIGHMEM
-	unsigned long pfn = arch_zone_lowest_possible_pfn[ZONE_HIGHMEM];
+	/*
+	 * Some architectures (e.g. ARM) set high_memory very early and
+	 * use it in arch setup code.
+	 * If an architecture already set high_memory don't overwrite it
+	 */
+	if (high_memory)
+		return;
 
-	if (arch_has_descending_max_zone_pfns() || highmem > PFN_PHYS(pfn))
+	if (IS_ENABLED(CONFIG_HIGHMEM) &&
+	    (arch_has_descending_max_zone_pfns() || highmem > PFN_PHYS(pfn)))
 		highmem = PFN_PHYS(pfn);
-#endif
 
 	high_memory = phys_to_virt(highmem - 1) + 1;
 }

-- 
Sincerely yours,
Mike.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 10/13] arch, mm: set high_memory in free_area_init()
  2025-03-11 21:41         ` Geert Uytterhoeven
@ 2025-03-12 15:26           ` Mark Brown
  0 siblings, 0 replies; 31+ messages in thread
From: Mark Brown @ 2025-03-12 15:26 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Gerald Schaefer, Guo Ren, Heiko Carstens, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86, Mike Rapoport


[-- Attachment #1.1: Type: text/plain, Size: 644 bytes --]

On Tue, Mar 11, 2025 at 10:41:28PM +0100, Geert Uytterhoeven wrote:
> On Tue, 11 Mar 2025 at 22:33, Mark Brown <broonie@kernel.org> wrote:

> > [    0.000000] efi: UEFI not found.
> > [    0.000000] cma: Reserved 64 MiB at 0x00000000

> > - I'd only been sampling the logs for the physical platforms, none of
> > which had shown anything.

> Hangs that early need "earlycon", which the qemu boot above does have.

Indeed, the physical platforms either don't support earlycon or I just
don't wire it up as standard in my CI.  I see a fix should already be on
the way, but FWIW the physical platforms do seem to have bisected to the
same commit.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 07/13] s390: make setup_zero_pages() use memblock
  2025-03-11  5:55     ` Mike Rapoport
@ 2025-03-12 15:56       ` Ard Biesheuvel
  2025-03-12 16:09         ` Mike Rapoport
  0 siblings, 1 reply; 31+ messages in thread
From: Ard Biesheuvel @ 2025-03-12 15:56 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Heiko Carstens, Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On Tue, 11 Mar 2025 at 06:56, Mike Rapoport <rppt@kernel.org> wrote:
>
> On Fri, Mar 07, 2025 at 04:28:15PM +0100, Heiko Carstens wrote:
> > On Thu, Mar 06, 2025 at 08:51:17PM +0200, Mike Rapoport wrote:
> > > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > >
> > > Allocating the zero pages from memblock is simpler because the memory is
> > > already reserved.
> > >
> > > This will also help with pulling out memblock_free_all() to the generic
> > > code and reducing code duplication in arch::mem_init().
> > >
> > > Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> > > ---
> > >  arch/s390/mm/init.c | 14 +++-----------
> > >  1 file changed, 3 insertions(+), 11 deletions(-)
> >
> > Acked-by: Heiko Carstens <hca@linux.ibm.com>
> >
> > > -   empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
> > > +   empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
> > >     if (!empty_zero_page)
> > >             panic("Out of memory in setup_zero_pages");
> >
> > This could have been converted to memblock_alloc_or_panic(), but I
> > guess this can also be done at a later point in time.
>
> Duh, I should have remembered about memblock_alloc_or_panic() :)
>
> @Andrew, can you please pick this as a fixup?
>
> From 344fec8519e5152c25809c9277b54a68f9cde0e9 Mon Sep 17 00:00:00 2001
> From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> Date: Tue, 11 Mar 2025 07:51:27 +0200
> Subject: [PATCH] s390: use memblock_alloc_or_panic() in setup_zero_page()
>
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> ---
>  arch/s390/mm/init.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
> index ab8ece3c41f1..c6a97329d7e7 100644
> --- a/arch/s390/mm/init.c
> +++ b/arch/s390/mm/init.c
> @@ -81,9 +81,7 @@ static void __init setup_zero_pages(void)
>         while (order > 2 && (total_pages >> 10) < (1UL << order))
>                 order--;
>
> -       empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
> -       if (!empty_zero_page)
> -               panic("Out of memory in setup_zero_pages");
> +       empty_zero_page = (unsigned long)memblock_alloc_or_panic(PAGE_SIZE << order, order);
>

memblock_alloc_or_panic() takes the alignment is in bytes, no? So
shouldn't the second argument be BIT(order)?

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

* Re: [PATCH 07/13] s390: make setup_zero_pages() use memblock
  2025-03-12 15:56       ` Ard Biesheuvel
@ 2025-03-12 16:09         ` Mike Rapoport
  0 siblings, 0 replies; 31+ messages in thread
From: Mike Rapoport @ 2025-03-12 16:09 UTC (permalink / raw)
  To: Ard Biesheuvel
  Cc: Heiko Carstens, Andrew Morton, Alexander Gordeev, Andreas Larsson,
	Andy Lutomirski, Arnd Bergmann, Borislav Petkov, Brian Cain,
	Catalin Marinas, Dave Hansen, David S. Miller, Dinh Nguyen,
	Geert Uytterhoeven, Gerald Schaefer, Guo Ren, Helge Deller,
	Huacai Chen, Ingo Molnar, Jiaxun Yang, Johannes Berg,
	John Paul Adrian Glaubitz, Madhavan Srinivasan, Matt Turner,
	Max Filippov, Michael Ellerman, Michal Simek, Palmer Dabbelt,
	Peter Zijlstra, Richard Weinberger, Russell King, Stafford Horne,
	Thomas Bogendoerfer, Thomas Gleixner, Vasily Gorbik, Vineet Gupta,
	Will Deacon, linux-alpha, linux-kernel, linux-snps-arc,
	linux-arm-kernel, linux-csky, linux-hexagon, loongarch,
	linux-m68k, linux-mips, linux-openrisc, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux,
	linux-um, linux-arch, linux-mm, x86

On Wed, Mar 12, 2025 at 04:56:59PM +0100, Ard Biesheuvel wrote:
> On Tue, 11 Mar 2025 at 06:56, Mike Rapoport <rppt@kernel.org> wrote:
> >
> > On Fri, Mar 07, 2025 at 04:28:15PM +0100, Heiko Carstens wrote:
> > > On Thu, Mar 06, 2025 at 08:51:17PM +0200, Mike Rapoport wrote:
> > > > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > > >
> > > > Allocating the zero pages from memblock is simpler because the memory is
> > > > already reserved.
> > > >
> > > > This will also help with pulling out memblock_free_all() to the generic
> > > > code and reducing code duplication in arch::mem_init().
> > > >
> > > > Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> > > > ---
> > > >  arch/s390/mm/init.c | 14 +++-----------
> > > >  1 file changed, 3 insertions(+), 11 deletions(-)
> > >
> > > Acked-by: Heiko Carstens <hca@linux.ibm.com>
> > >
> > > > -   empty_zero_page = __get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
> > > > +   empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
> > > >     if (!empty_zero_page)
> > > >             panic("Out of memory in setup_zero_pages");
> > >
> > > This could have been converted to memblock_alloc_or_panic(), but I
> > > guess this can also be done at a later point in time.
> >
> > Duh, I should have remembered about memblock_alloc_or_panic() :)
> >
> > @Andrew, can you please pick this as a fixup?
> >
> > From 344fec8519e5152c25809c9277b54a68f9cde0e9 Mon Sep 17 00:00:00 2001
> > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > Date: Tue, 11 Mar 2025 07:51:27 +0200
> > Subject: [PATCH] s390: use memblock_alloc_or_panic() in setup_zero_page()
> >
> > Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> > ---
> >  arch/s390/mm/init.c | 4 +---
> >  1 file changed, 1 insertion(+), 3 deletions(-)
> >
> > diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
> > index ab8ece3c41f1..c6a97329d7e7 100644
> > --- a/arch/s390/mm/init.c
> > +++ b/arch/s390/mm/init.c
> > @@ -81,9 +81,7 @@ static void __init setup_zero_pages(void)
> >         while (order > 2 && (total_pages >> 10) < (1UL << order))
> >                 order--;
> >
> > -       empty_zero_page = (unsigned long)memblock_alloc(PAGE_SIZE << order, order);
> > -       if (!empty_zero_page)
> > -               panic("Out of memory in setup_zero_pages");
> > +       empty_zero_page = (unsigned long)memblock_alloc_or_panic(PAGE_SIZE << order, order);
> >
> 
> memblock_alloc_or_panic() takes the alignment is in bytes, no? So
> shouldn't the second argument be BIT(order)?

The second argument should be PAGE_SIZE. Thanks for catching that!

-- 
Sincerely yours,
Mike.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

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

end of thread, other threads:[~2025-03-12 16:13 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-06 18:51 [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Mike Rapoport
2025-03-06 18:51 ` [PATCH 01/13] arm: mem_init: use memblock_phys_free() to free DMA memory on SA1111 Mike Rapoport
2025-03-06 18:51 ` [PATCH 02/13] csky: move setup_initrd() to setup.c Mike Rapoport
2025-03-10  0:43   ` Guo Ren
2025-03-06 18:51 ` [PATCH 03/13] hexagon: move initialization of init_mm.context init to paging_init() Mike Rapoport
2025-03-06 18:51 ` [PATCH 04/13] MIPS: consolidate mem_init() for NUMA machines Mike Rapoport
2025-03-06 18:51 ` [PATCH 05/13] MIPS: make setup_zero_pages() use memblock Mike Rapoport
2025-03-11  5:57   ` Mike Rapoport
2025-03-06 18:51 ` [PATCH 06/13] nios2: move pr_debug() about memory start and end to setup_arch() Mike Rapoport
2025-03-06 18:51 ` [PATCH 07/13] s390: make setup_zero_pages() use memblock Mike Rapoport
2025-03-07 15:28   ` Heiko Carstens
2025-03-11  5:55     ` Mike Rapoport
2025-03-12 15:56       ` Ard Biesheuvel
2025-03-12 16:09         ` Mike Rapoport
2025-03-06 18:51 ` [PATCH 08/13] xtensa: split out printing of virtual memory layout to a function Mike Rapoport
2025-03-06 18:51 ` [PATCH 09/13] arch, mm: set max_mapnr when allocating memory map for FLATMEM Mike Rapoport
2025-03-06 18:51 ` [PATCH 10/13] arch, mm: set high_memory in free_area_init() Mike Rapoport
2025-03-11 17:51   ` Mark Brown
2025-03-11 21:06     ` Mike Rapoport
2025-03-11 21:33       ` Mark Brown
2025-03-11 21:41         ` Geert Uytterhoeven
2025-03-12 15:26           ` Mark Brown
2025-03-11 21:44         ` Russell King (Oracle)
2025-03-11 22:05         ` Russell King (Oracle)
2025-03-11 21:59     ` Russell King (Oracle)
2025-03-12  6:34       ` Mike Rapoport
2025-03-06 18:51 ` [PATCH 11/13] arch, mm: streamline HIGHMEM freeing Mike Rapoport
2025-03-06 18:51 ` [PATCH 12/13] arch, mm: introduce arch_mm_preinit Mike Rapoport
2025-03-06 18:51 ` [PATCH 13/13] arch, mm: make releasing of memory to page allocator more explicit Mike Rapoport
2025-03-06 19:38 ` [PATCH 00/13] arch, mm: reduce code duplication in mem_init() Dave Hansen
2025-03-06 21:20 ` Andrew Morton

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).