Re: [PATCH 02/13] csky: move setup_initrd() to setup.c

Guo Ren
2025-03-10T00:44:12Z

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