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

csky: move setup_initrd() to setup.c

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

Link: https://lkml.kernel.org/r/20250313135003.836600-3-rppt@kernel.org
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: Guo Ren (csky) <guoren@kernel.org>
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: 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: Max Filippov <jcmvbkbc@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
2b1d532e e11079dd

+43 -43
+43
arch/csky/kernel/setup.c
··· 12 12 #include <asm/mmu_context.h> 13 13 #include <asm/pgalloc.h> 14 14 15 + #ifdef CONFIG_BLK_DEV_INITRD 16 + static void __init setup_initrd(void) 17 + { 18 + unsigned long size; 19 + 20 + if (initrd_start >= initrd_end) { 21 + pr_err("initrd not found or empty"); 22 + goto disable; 23 + } 24 + 25 + if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { 26 + pr_err("initrd extends beyond end of memory"); 27 + goto disable; 28 + } 29 + 30 + size = initrd_end - initrd_start; 31 + 32 + if (memblock_is_region_reserved(__pa(initrd_start), size)) { 33 + pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region", 34 + __pa(initrd_start), size); 35 + goto disable; 36 + } 37 + 38 + memblock_reserve(__pa(initrd_start), size); 39 + 40 + pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n", 41 + (void *)(initrd_start), size); 42 + 43 + initrd_below_start_ok = 1; 44 + 45 + return; 46 + 47 + disable: 48 + initrd_start = initrd_end = 0; 49 + 50 + pr_err(" - disabling initrd\n"); 51 + } 52 + #endif 53 + 15 54 static void __init csky_memblock_init(void) 16 55 { 17 56 unsigned long lowmem_size = PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET); ··· 78 39 } else if (size > sseg_size) { 79 40 max_low_pfn = min_low_pfn + sseg_size; 80 41 } 42 + 43 + #ifdef CONFIG_BLK_DEV_INITRD 44 + setup_initrd(); 45 + #endif 81 46 82 47 max_zone_pfn[ZONE_NORMAL] = max_low_pfn; 83 48
-43
arch/csky/mm/init.c
··· 42 42 __page_aligned_bss; 43 43 EXPORT_SYMBOL(empty_zero_page); 44 44 45 - #ifdef CONFIG_BLK_DEV_INITRD 46 - static void __init setup_initrd(void) 47 - { 48 - unsigned long size; 49 - 50 - if (initrd_start >= initrd_end) { 51 - pr_err("initrd not found or empty"); 52 - goto disable; 53 - } 54 - 55 - if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { 56 - pr_err("initrd extends beyond end of memory"); 57 - goto disable; 58 - } 59 - 60 - size = initrd_end - initrd_start; 61 - 62 - if (memblock_is_region_reserved(__pa(initrd_start), size)) { 63 - pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region", 64 - __pa(initrd_start), size); 65 - goto disable; 66 - } 67 - 68 - memblock_reserve(__pa(initrd_start), size); 69 - 70 - pr_info("Initial ramdisk at: 0x%p (%lu bytes)\n", 71 - (void *)(initrd_start), size); 72 - 73 - initrd_below_start_ok = 1; 74 - 75 - return; 76 - 77 - disable: 78 - initrd_start = initrd_end = 0; 79 - 80 - pr_err(" - disabling initrd\n"); 81 - } 82 - #endif 83 - 84 45 void __init mem_init(void) 85 46 { 86 47 #ifdef CONFIG_HIGHMEM ··· 52 91 set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET); 53 92 #endif 54 93 high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT); 55 - 56 - #ifdef CONFIG_BLK_DEV_INITRD 57 - setup_initrd(); 58 - #endif 59 94 60 95 memblock_free_all(); 61 96