Commit 85975387 authored by Hari Bathini's avatar Hari Bathini Committed by Michael Ellerman

powerpc/fadump: Do not use hugepages when fadump is active

FADump capture kernel boots in restricted memory environment preserving
the context of previous kernel to save vmcore. Supporting hugepages in
such environment makes things unnecessarily complicated, as hugepages
need memory set aside for them. This means most of the capture kernel's
memory is used in supporting hugepages. In most cases, this results in
out-of-memory issues while booting FADump capture kernel. But hugepages
are not of much use in capture kernel whose only job is to save vmcore.
So, disabling hugepages support, when fadump is active, is a reliable
solution for the out of memory issues. Introducing a flag variable to
disable HugeTLB support when fadump is active.
Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
Reviewed-by: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent b71a693d
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#ifdef CONFIG_HUGETLB_PAGE #ifdef CONFIG_HUGETLB_PAGE
extern bool hugetlb_disabled;
extern unsigned int HPAGE_SHIFT; extern unsigned int HPAGE_SHIFT;
#else #else
#define HPAGE_SHIFT PAGE_SHIFT #define HPAGE_SHIFT PAGE_SHIFT
......
...@@ -402,6 +402,14 @@ int __init fadump_reserve_mem(void) ...@@ -402,6 +402,14 @@ int __init fadump_reserve_mem(void)
if (fw_dump.dump_active) { if (fw_dump.dump_active) {
pr_info("Firmware-assisted dump is active.\n"); pr_info("Firmware-assisted dump is active.\n");
#ifdef CONFIG_HUGETLB_PAGE
/*
* FADump capture kernel doesn't care much about hugepages.
* In fact, handling hugepages in capture kernel is asking for
* trouble. So, disable HugeTLB support when fadump is active.
*/
hugetlb_disabled = true;
#endif
/* /*
* If last boot has crashed then reserve all the memory * If last boot has crashed then reserve all the memory
* above boot_memory_size so that we don't touch it until * above boot_memory_size so that we don't touch it until
......
...@@ -572,8 +572,10 @@ static void __init htab_scan_page_sizes(void) ...@@ -572,8 +572,10 @@ static void __init htab_scan_page_sizes(void)
} }
#ifdef CONFIG_HUGETLB_PAGE #ifdef CONFIG_HUGETLB_PAGE
if (!hugetlb_disabled) {
/* Reserve 16G huge page memory sections for huge pages */ /* Reserve 16G huge page memory sections for huge pages */
of_scan_flat_dt(htab_dt_scan_hugepage_blocks, NULL); of_scan_flat_dt(htab_dt_scan_hugepage_blocks, NULL);
}
#endif /* CONFIG_HUGETLB_PAGE */ #endif /* CONFIG_HUGETLB_PAGE */
} }
......
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
#define PAGE_SHIFT_16M 24 #define PAGE_SHIFT_16M 24
#define PAGE_SHIFT_16G 34 #define PAGE_SHIFT_16G 34
bool hugetlb_disabled = false;
unsigned int HPAGE_SHIFT; unsigned int HPAGE_SHIFT;
EXPORT_SYMBOL(HPAGE_SHIFT); EXPORT_SYMBOL(HPAGE_SHIFT);
...@@ -651,6 +653,11 @@ static int __init hugetlbpage_init(void) ...@@ -651,6 +653,11 @@ static int __init hugetlbpage_init(void)
{ {
int psize; int psize;
if (hugetlb_disabled) {
pr_info("HugeTLB support is disabled!\n");
return 0;
}
#if !defined(CONFIG_PPC_FSL_BOOK3E) && !defined(CONFIG_PPC_8xx) #if !defined(CONFIG_PPC_FSL_BOOK3E) && !defined(CONFIG_PPC_8xx)
if (!radix_enabled() && !mmu_has_feature(MMU_FTR_16M_PAGE)) if (!radix_enabled() && !mmu_has_feature(MMU_FTR_16M_PAGE))
return -ENODEV; return -ENODEV;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment