s390: query dynamic DEBUG_PAGEALLOC setting
authorChristian Borntraeger <borntraeger@de.ibm.com>
Tue, 15 Mar 2016 21:57:36 +0000 (14:57 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 15 Mar 2016 23:55:16 +0000 (16:55 -0700)
We can use debug_pagealloc_enabled() to check if we can map the identity
mapping with 1MB/2GB pages as well as to print the current setting in
dump_stack.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Laura Abbott <labbott@fedoraproject.org>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/s390/kernel/dumpstack.c
arch/s390/mm/vmem.c

index 02bd02ff648b5ab570c5ffe920b27bbfbc3d5fd3..14c1ed3617c9c0892c89b6fcdab52e163de243c2 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/export.h>
 #include <linux/kdebug.h>
 #include <linux/ptrace.h>
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/sched.h>
 #include <asm/processor.h>
@@ -184,9 +185,8 @@ void die(struct pt_regs *regs, const char *str)
 #ifdef CONFIG_SMP
        printk("SMP ");
 #endif
-#ifdef CONFIG_DEBUG_PAGEALLOC
-       printk("DEBUG_PAGEALLOC");
-#endif
+       if (debug_pagealloc_enabled())
+               printk("DEBUG_PAGEALLOC");
        printk("\n");
        notify_die(DIE_OOPS, str, regs, 0, regs->int_code & 0xffff, SIGSEGV);
        print_modules();
index ef7d6c8fea66ea62eeddbe43420081d837c44274..d27fccbad7c1e6a67af2d355c486c3b7016958e9 100644 (file)
@@ -94,16 +94,15 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro)
                        pgd_populate(&init_mm, pg_dir, pu_dir);
                }
                pu_dir = pud_offset(pg_dir, address);
-#ifndef CONFIG_DEBUG_PAGEALLOC
                if (MACHINE_HAS_EDAT2 && pud_none(*pu_dir) && address &&
-                   !(address & ~PUD_MASK) && (address + PUD_SIZE <= end)) {
+                   !(address & ~PUD_MASK) && (address + PUD_SIZE <= end) &&
+                    !debug_pagealloc_enabled()) {
                        pud_val(*pu_dir) = __pa(address) |
                                _REGION_ENTRY_TYPE_R3 | _REGION3_ENTRY_LARGE |
                                (ro ? _REGION_ENTRY_PROTECT : 0);
                        address += PUD_SIZE;
                        continue;
                }
-#endif
                if (pud_none(*pu_dir)) {
                        pm_dir = vmem_pmd_alloc();
                        if (!pm_dir)
@@ -111,9 +110,9 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro)
                        pud_populate(&init_mm, pu_dir, pm_dir);
                }
                pm_dir = pmd_offset(pu_dir, address);
-#ifndef CONFIG_DEBUG_PAGEALLOC
                if (MACHINE_HAS_EDAT1 && pmd_none(*pm_dir) && address &&
-                   !(address & ~PMD_MASK) && (address + PMD_SIZE <= end)) {
+                   !(address & ~PMD_MASK) && (address + PMD_SIZE <= end) &&
+                   !debug_pagealloc_enabled()) {
                        pmd_val(*pm_dir) = __pa(address) |
                                _SEGMENT_ENTRY | _SEGMENT_ENTRY_LARGE |
                                _SEGMENT_ENTRY_YOUNG |
@@ -121,7 +120,6 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro)
                        address += PMD_SIZE;
                        continue;
                }
-#endif
                if (pmd_none(*pm_dir)) {
                        pt_dir = vmem_pte_alloc(address);
                        if (!pt_dir)