x86: debug pmd_bad()
authorIngo Molnar <mingo@elte.hu>
Mon, 3 Mar 2008 08:53:17 +0000 (09:53 +0100)
committerIngo Molnar <mingo@elte.hu>
Thu, 17 Apr 2008 15:40:52 +0000 (17:40 +0200)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/pgtable_32.c
include/asm-x86/pgtable_32.h

index 2f9e9afcb9f4270d6e5f5a496f33999d6ce8298b..76e4f4d26272967095115d4144fc8bcf4939e2aa 100644 (file)
@@ -381,3 +381,10 @@ void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
 }
 
 #endif
+
+int pmd_bad(pmd_t pmd)
+{
+       WARN_ON_ONCE(pmd_bad_v1(pmd) != pmd_bad_v2(pmd));
+
+       return pmd_bad_v1(pmd);
+}
index 997c36c6b4d73dabdc74df1cd077370cd1d552e6..1e2c0d839528b5cd7ae9253bf4a36f616df11958 100644 (file)
@@ -90,7 +90,11 @@ extern unsigned long pg0[];
 /* To avoid harmful races, pmd_none(x) should check only the lower when PAE */
 #define pmd_none(x)    (!(unsigned long)pmd_val(x))
 #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT)
-#define        pmd_bad(x)      ((pmd_val(x) \
+
+extern int pmd_bad(pmd_t pmd);
+
+#define pmd_bad_v1(x)  ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
+#define        pmd_bad_v2(x)   ((pmd_val(x) \
                          & ~(PAGE_MASK | _PAGE_USER | _PAGE_PSE | _PAGE_NX)) \
                         != _KERNPG_TABLE)