Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xtensa: split out printing of virtual memory layout to a function

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

Link: https://lkml.kernel.org/r/20250313135003.836600-9-rppt@kernel.org
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Andreas Larsson <andreas@gaisler.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Borislav Betkov <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Guo Ren (csky) <guoren@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Helge Deller <deller@gmx.de>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Russel King <linux@armlinux.org.uk>
Cc: Stafford Horne <shorne@gmail.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Thomas Gleinxer <tglx@linutronix.de>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Vineet Gupta <vgupta@kernel.org>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Mike Rapoport (Microsoft) and committed by
Andrew Morton
d319c8b4 54ccf66f

+55 -52
+55 -52
arch/xtensa/mm/init.c
··· 66 66 memblock_dump_all(); 67 67 } 68 68 69 - 70 - void __init zones_init(void) 69 + static void __init print_vm_layout(void) 71 70 { 72 - /* All pages are DMA-able, so we put them all in the DMA zone. */ 73 - unsigned long max_zone_pfn[MAX_NR_ZONES] = { 74 - [ZONE_NORMAL] = max_low_pfn, 75 - #ifdef CONFIG_HIGHMEM 76 - [ZONE_HIGHMEM] = max_pfn, 77 - #endif 78 - }; 79 - free_area_init(max_zone_pfn); 80 - } 81 - 82 - static void __init free_highpages(void) 83 - { 84 - #ifdef CONFIG_HIGHMEM 85 - unsigned long max_low = max_low_pfn; 86 - phys_addr_t range_start, range_end; 87 - u64 i; 88 - 89 - /* set highmem page free */ 90 - for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE, 91 - &range_start, &range_end, NULL) { 92 - unsigned long start = PFN_UP(range_start); 93 - unsigned long end = PFN_DOWN(range_end); 94 - 95 - /* Ignore complete lowmem entries */ 96 - if (end <= max_low) 97 - continue; 98 - 99 - /* Truncate partial highmem entries */ 100 - if (start < max_low) 101 - start = max_low; 102 - 103 - for (; start < end; start++) 104 - free_highmem_page(pfn_to_page(start)); 105 - } 106 - #endif 107 - } 108 - 109 - /* 110 - * Initialize memory pages. 111 - */ 112 - 113 - void __init mem_init(void) 114 - { 115 - free_highpages(); 116 - 117 - max_mapnr = max_pfn - ARCH_PFN_OFFSET; 118 - high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT); 119 - 120 - memblock_free_all(); 121 - 122 71 pr_info("virtual kernel memory layout:\n" 123 72 #ifdef CONFIG_KASAN 124 73 " kasan : 0x%08lx - 0x%08lx (%5lu MB)\n" ··· 114 165 (unsigned long)(__init_end - __init_begin) >> 10, 115 166 (unsigned long)__bss_start, (unsigned long)__bss_stop, 116 167 (unsigned long)(__bss_stop - __bss_start) >> 10); 168 + } 169 + 170 + void __init zones_init(void) 171 + { 172 + /* All pages are DMA-able, so we put them all in the DMA zone. */ 173 + unsigned long max_zone_pfn[MAX_NR_ZONES] = { 174 + [ZONE_NORMAL] = max_low_pfn, 175 + #ifdef CONFIG_HIGHMEM 176 + [ZONE_HIGHMEM] = max_pfn, 177 + #endif 178 + }; 179 + free_area_init(max_zone_pfn); 180 + print_vm_layout(); 181 + } 182 + 183 + static void __init free_highpages(void) 184 + { 185 + #ifdef CONFIG_HIGHMEM 186 + unsigned long max_low = max_low_pfn; 187 + phys_addr_t range_start, range_end; 188 + u64 i; 189 + 190 + /* set highmem page free */ 191 + for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE, 192 + &range_start, &range_end, NULL) { 193 + unsigned long start = PFN_UP(range_start); 194 + unsigned long end = PFN_DOWN(range_end); 195 + 196 + /* Ignore complete lowmem entries */ 197 + if (end <= max_low) 198 + continue; 199 + 200 + /* Truncate partial highmem entries */ 201 + if (start < max_low) 202 + start = max_low; 203 + 204 + for (; start < end; start++) 205 + free_highmem_page(pfn_to_page(start)); 206 + } 207 + #endif 208 + } 209 + 210 + /* 211 + * Initialize memory pages. 212 + */ 213 + 214 + void __init mem_init(void) 215 + { 216 + free_highpages(); 217 + 218 + max_mapnr = max_pfn - ARCH_PFN_OFFSET; 219 + high_memory = (void *)__va(max_low_pfn << PAGE_SHIFT); 220 + 221 + memblock_free_all(); 117 222 } 118 223 119 224 static void __init parse_memmap_one(char *p)