|
@@ -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
|