]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/fadump: Do not use hugepages when fadump is active
authorHari Bathini <hbathini@linux.vnet.ibm.com>
Tue, 10 Apr 2018 13:41:31 +0000 (19:11 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 May 2018 13:09:25 +0000 (23:09 +1000)
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: Hari Bathini <hbathini@linux.vnet.ibm.com>
Reviewed-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/page.h
arch/powerpc/kernel/fadump.c
arch/powerpc/mm/hash_utils_64.c
arch/powerpc/mm/hugetlbpage.c

index dec9ce5ba8afa5fe46153b006c77a98da787127c..db7be0779d550cd7200fed092f0de94e5c4a8b03 100644 (file)
@@ -39,6 +39,7 @@
 
 #ifndef __ASSEMBLY__
 #ifdef CONFIG_HUGETLB_PAGE
+extern bool hugetlb_disabled;
 extern unsigned int HPAGE_SHIFT;
 #else
 #define HPAGE_SHIFT PAGE_SHIFT
index bea8d5fe3b6ee668bb718400b95bf70f585f8f9d..8ceabef40d3d4a21ac63bb0e58a49a5d3afd3c96 100644 (file)
@@ -402,6 +402,14 @@ int __init fadump_reserve_mem(void)
        if (fw_dump.dump_active) {
                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
                 * above boot_memory_size so that we don't touch it until
index 0bd3790d35df419d1622f10754abd38be1575963..5beeec6fbb9beec7d7f07f3b52663157e9fbdde4 100644 (file)
@@ -572,8 +572,10 @@ static void __init htab_scan_page_sizes(void)
        }
 
 #ifdef CONFIG_HUGETLB_PAGE
-       /* Reserve 16G huge page memory sections for huge pages */
-       of_scan_flat_dt(htab_dt_scan_hugepage_blocks, NULL);
+       if (!hugetlb_disabled) {
+               /* Reserve 16G huge page memory sections for huge pages */
+               of_scan_flat_dt(htab_dt_scan_hugepage_blocks, NULL);
+       }
 #endif /* CONFIG_HUGETLB_PAGE */
 }
 
index f1153f8254e3d79fe34b970df96a54de7088e225..2a4b1bf8bde6cde305508f75fb3da67404fdffc0 100644 (file)
@@ -35,6 +35,8 @@
 #define PAGE_SHIFT_16M 24
 #define PAGE_SHIFT_16G 34
 
+bool hugetlb_disabled = false;
+
 unsigned int HPAGE_SHIFT;
 EXPORT_SYMBOL(HPAGE_SHIFT);
 
@@ -651,6 +653,11 @@ static int __init hugetlbpage_init(void)
 {
        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 (!radix_enabled() && !mmu_has_feature(MMU_FTR_16M_PAGE))
                return -ENODEV;