The only defconfig that selects this is CONFIG_KEXEC_HANDOVER. Replace CONFIG_MEMBLOCK_KHO_SCRATCH with CONFIG_KEXEC_HANDOVER to simplify code. No functional change intended. Suggested-by: Kiryl Shutsemau Signed-off-by: Usama Arif --- include/linux/memblock.h | 2 +- kernel/Kconfig.kexec | 1 - mm/Kconfig | 4 ---- mm/memblock.c | 4 ++-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 221118b5a16e1..8bd9bcaccceb8 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -611,7 +611,7 @@ static inline void early_memtest(phys_addr_t start, phys_addr_t end) { } static inline void memtest_report_meminfo(struct seq_file *m) { } #endif -#ifdef CONFIG_MEMBLOCK_KHO_SCRATCH +#ifdef CONFIG_KEXEC_HANDOVER void memblock_set_kho_scratch_only(void); void memblock_clear_kho_scratch_only(void); void memmap_init_kho_scratch_pages(void); diff --git a/kernel/Kconfig.kexec b/kernel/Kconfig.kexec index 54e5810726176..06a7c43652cfd 100644 --- a/kernel/Kconfig.kexec +++ b/kernel/Kconfig.kexec @@ -98,7 +98,6 @@ config KEXEC_HANDOVER bool "kexec handover" depends on ARCH_SUPPORTS_KEXEC_HANDOVER && ARCH_SUPPORTS_KEXEC_FILE depends on !DEFERRED_STRUCT_PAGE_INIT - select MEMBLOCK_KHO_SCRATCH select KEXEC_FILE select DEBUG_FS select LIBFDT diff --git a/mm/Kconfig b/mm/Kconfig index bd0ea5454af82..6d6002f57c18f 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -442,10 +442,6 @@ config HAVE_GUP_FAST depends on MMU bool -# Enable memblock support for scratch memory which is needed for kexec handover -config MEMBLOCK_KHO_SCRATCH - bool - # Don't discard allocated memory used to track "memory" and "reserved" memblocks # after early boot, so it can still be used to test for validity of memory. # Also, memblocks are updated with memory hot(un)plug. diff --git a/mm/memblock.c b/mm/memblock.c index e23e16618e9b3..8b13d5c28922a 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -112,7 +112,7 @@ unsigned long min_low_pfn; unsigned long max_pfn; unsigned long long max_possible_pfn; -#ifdef CONFIG_MEMBLOCK_KHO_SCRATCH +#ifdef CONFIG_KEXEC_HANDOVER /* When set to true, only allocate from MEMBLOCK_KHO_SCRATCH ranges */ static bool kho_scratch_only; #else @@ -948,7 +948,7 @@ int __init_memblock memblock_physmem_add(phys_addr_t base, phys_addr_t size) } #endif -#ifdef CONFIG_MEMBLOCK_KHO_SCRATCH +#ifdef CONFIG_KEXEC_HANDOVER __init void memblock_set_kho_scratch_only(void) { kho_scratch_only = true; -- 2.47.3 The scratch memory for kexec handover is used to bootstrap the kexec'ed kernel. It is only needed when CONFIG_KEXEC_HANDOVER is enabled and only if it is a KHO boot. Add checks to prevent marking a KHO scratch region unless needed. Fixes: a2daf83e10378 ("x86/e820: temporarily enable KHO scratch for memory below 1M") Reported-by: Vlad Poenaru Signed-off-by: Usama Arif --- mm/memblock.c | 74 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 8b13d5c28922a..8a2cebcfe0a18 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1114,36 +1114,6 @@ int __init_memblock memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t MEMBLOCK_RSRV_NOINIT); } -/** - * memblock_mark_kho_scratch - Mark a memory region as MEMBLOCK_KHO_SCRATCH. - * @base: the base phys addr of the region - * @size: the size of the region - * - * Only memory regions marked with %MEMBLOCK_KHO_SCRATCH will be considered - * for allocations during early boot with kexec handover. - * - * Return: 0 on success, -errno on failure. - */ -__init int memblock_mark_kho_scratch(phys_addr_t base, phys_addr_t size) -{ - return memblock_setclr_flag(&memblock.memory, base, size, 1, - MEMBLOCK_KHO_SCRATCH); -} - -/** - * memblock_clear_kho_scratch - Clear MEMBLOCK_KHO_SCRATCH flag for a - * specified region. - * @base: the base phys addr of the region - * @size: the size of the region - * - * Return: 0 on success, -errno on failure. - */ -__init int memblock_clear_kho_scratch(phys_addr_t base, phys_addr_t size) -{ - return memblock_setclr_flag(&memblock.memory, base, size, 0, - MEMBLOCK_KHO_SCRATCH); -} - static bool should_skip_region(struct memblock_type *type, struct memblock_region *m, int nid, int flags) @@ -2617,12 +2587,56 @@ static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, return true; } + +/** + * memblock_mark_kho_scratch - Mark a memory region as MEMBLOCK_KHO_SCRATCH. + * @base: the base phys addr of the region + * @size: the size of the region + * + * Only memory regions marked with %MEMBLOCK_KHO_SCRATCH will be considered + * for allocations during early boot with kexec handover. + * + * Return: 0 on success, -errno on failure. + */ +__init int memblock_mark_kho_scratch(phys_addr_t base, phys_addr_t size) +{ + if (is_kho_boot()) + return memblock_setclr_flag(&memblock.memory, base, size, 1, + MEMBLOCK_KHO_SCRATCH); + return 0; +} + +/** + * memblock_clear_kho_scratch - Clear MEMBLOCK_KHO_SCRATCH flag for a + * specified region. + * @base: the base phys addr of the region + * @size: the size of the region + * + * Return: 0 on success, -errno on failure. + */ +__init int memblock_clear_kho_scratch(phys_addr_t base, phys_addr_t size) +{ + if (is_kho_boot()) + return memblock_setclr_flag(&memblock.memory, base, size, 0, + MEMBLOCK_KHO_SCRATCH); + return 0; +} #else static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, phys_addr_t align) { return false; } + +__init int memblock_mark_kho_scratch(phys_addr_t base, phys_addr_t size) +{ + return 0; +} + +__init int memblock_clear_kho_scratch(phys_addr_t base, phys_addr_t size) +{ + return 0; +} #endif /* CONFIG_KEXEC_HANDOVER */ /* -- 2.47.3