x86, mm: Make DEBUG_VIRTUAL work earlier in boot
[deliverable/linux.git] / arch / x86 / mm / physaddr.c
index c73feddd518d475f94756b84b453d992f66c36ab..e666cbbb926191e18995e0cc30c955a726bf462b 100644 (file)
@@ -1,3 +1,4 @@
+#include <linux/bootmem.h>
 #include <linux/mmdebug.h>
 #include <linux/module.h>
 #include <linux/mm.h>
@@ -68,10 +69,16 @@ EXPORT_SYMBOL(__virt_addr_valid);
 #ifdef CONFIG_DEBUG_VIRTUAL
 unsigned long __phys_addr(unsigned long x)
 {
+       unsigned long phys_addr = x - PAGE_OFFSET;
        /* VMALLOC_* aren't constants  */
        VIRTUAL_BUG_ON(x < PAGE_OFFSET);
        VIRTUAL_BUG_ON(__vmalloc_start_set && is_vmalloc_addr((void *) x));
-       return x - PAGE_OFFSET;
+       /* max_low_pfn is set early, but not _that_ early */
+       if (max_low_pfn) {
+               VIRTUAL_BUG_ON((phys_addr >> PAGE_SHIFT) > max_low_pfn);
+               BUG_ON(slow_virt_to_phys((void *)x) != phys_addr);
+       }
+       return phys_addr;
 }
 EXPORT_SYMBOL(__phys_addr);
 #endif
This page took 0.024134 seconds and 5 git commands to generate.