forked from luck/tmp_suning_uos_patched
initramfs: move the legacy keepinitrd parameter to core code
No need to handle the freeing disable in arch code when we already have a core hook (and a different name for the option) for it. Link: http://lkml.kernel.org/r/20190213174621.29297-7-hch@lst.de Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Catalin Marinas <catalin.marinas@arm.com> [arm64] Acked-by: Mike Rapoport <rppt@linux.ibm.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> [m68k] Cc: Steven Price <steven.price@arm.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Guan Xuetao <gxt@pku.edu.cn> Cc: Russell King <linux@armlinux.org.uk> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
afef7889c4
commit
d8ae8a3765
|
@ -245,6 +245,13 @@ config ARCH_HAS_FORTIFY_SOURCE
|
|||
An architecture should select this when it can successfully
|
||||
build and run with CONFIG_FORTIFY_SOURCE.
|
||||
|
||||
#
|
||||
# Select if the arch provides a historic keepinit alias for the retain_initrd
|
||||
# command line option
|
||||
#
|
||||
config ARCH_HAS_KEEPINITRD
|
||||
bool
|
||||
|
||||
# Select if arch has all set_memory_ro/rw/x/nx() functions in asm/cacheflush.h
|
||||
config ARCH_HAS_SET_MEMORY
|
||||
bool
|
||||
|
|
|
@ -9,6 +9,7 @@ config ARM
|
|||
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
||||
select ARCH_HAS_ELF_RANDOMIZE
|
||||
select ARCH_HAS_FORTIFY_SOURCE
|
||||
select ARCH_HAS_KEEPINITRD
|
||||
select ARCH_HAS_KCOV
|
||||
select ARCH_HAS_MEMBARRIER_SYNC_CORE
|
||||
select ARCH_HAS_PTE_SPECIAL if ARM_LPAE
|
||||
|
|
|
@ -695,27 +695,14 @@ void free_initmem(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
|
||||
static int keep_initrd;
|
||||
|
||||
void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (!keep_initrd) {
|
||||
if (start == initrd_start)
|
||||
start = round_down(start, PAGE_SIZE);
|
||||
if (end == initrd_end)
|
||||
end = round_up(end, PAGE_SIZE);
|
||||
if (start == initrd_start)
|
||||
start = round_down(start, PAGE_SIZE);
|
||||
if (end == initrd_end)
|
||||
end = round_up(end, PAGE_SIZE);
|
||||
|
||||
poison_init_mem((void *)start, PAGE_ALIGN(end) - start);
|
||||
free_reserved_area((void *)start, (void *)end, -1, "initrd");
|
||||
}
|
||||
poison_init_mem((void *)start, PAGE_ALIGN(end) - start);
|
||||
free_reserved_area((void *)start, (void *)end, -1, "initrd");
|
||||
}
|
||||
|
||||
static int __init keepinitrd_setup(char *__unused)
|
||||
{
|
||||
keep_initrd = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("keepinitrd", keepinitrd_setup);
|
||||
#endif
|
||||
|
|
|
@ -21,6 +21,7 @@ config ARM64
|
|||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_HAS_GIGANTIC_PAGE if (MEMORY_ISOLATION && COMPACTION) || CMA
|
||||
select ARCH_HAS_KCOV
|
||||
select ARCH_HAS_KEEPINITRD
|
||||
select ARCH_HAS_MEMBARRIER_SYNC_CORE
|
||||
select ARCH_HAS_PTE_SPECIAL
|
||||
select ARCH_HAS_SETUP_DMA_OPS
|
||||
|
|
|
@ -578,24 +578,11 @@ void free_initmem(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
|
||||
static int keep_initrd __initdata;
|
||||
|
||||
void __init free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (!keep_initrd) {
|
||||
free_reserved_area((void *)start, (void *)end, 0, "initrd");
|
||||
memblock_free(__virt_to_phys(start), end - start);
|
||||
}
|
||||
free_reserved_area((void *)start, (void *)end, 0, "initrd");
|
||||
memblock_free(__virt_to_phys(start), end - start);
|
||||
}
|
||||
|
||||
static int __init keepinitrd_setup(char *__unused)
|
||||
{
|
||||
keep_initrd = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("keepinitrd", keepinitrd_setup);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -3,6 +3,7 @@ config UNICORE32
|
|||
def_bool y
|
||||
select ARCH_32BIT_OFF_T
|
||||
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
||||
select ARCH_HAS_KEEPINITRD
|
||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||
select HAVE_KERNEL_GZIP
|
||||
|
|
|
@ -294,20 +294,8 @@ void free_initmem(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
|
||||
static int keep_initrd;
|
||||
|
||||
void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (!keep_initrd)
|
||||
free_reserved_area((void *)start, (void *)end, -1, "initrd");
|
||||
free_reserved_area((void *)start, (void *)end, -1, "initrd");
|
||||
}
|
||||
|
||||
static int __init keepinitrd_setup(char *__unused)
|
||||
{
|
||||
keep_initrd = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("keepinitrd", keepinitrd_setup);
|
||||
#endif
|
||||
|
|
|
@ -513,6 +513,15 @@ static int __init retain_initrd_param(char *str)
|
|||
}
|
||||
__setup("retain_initrd", retain_initrd_param);
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_KEEPINITRD
|
||||
static int __init keepinitrd_setup(char *__unused)
|
||||
{
|
||||
do_retain_initrd = 1;
|
||||
return 1;
|
||||
}
|
||||
__setup("keepinitrd", keepinitrd_setup);
|
||||
#endif
|
||||
|
||||
extern char __initramfs_start[];
|
||||
extern unsigned long __initramfs_size;
|
||||
#include <linux/initrd.h>
|
||||
|
|
Loading…
Reference in New Issue
Block a user