Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e66a95127dc4273d3573eb03657991f7bbd5dca3
Commit:     e66a95127dc4273d3573eb03657991f7bbd5dca3
Parent:     0c42f392767d3592e1cf676857d398ef69be7c9c
Author:     Harvey Harrison <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 30 13:33:42 2008 +0100
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 13:33:42 2008 +0100

    x86: add dump_pagetable helper to X86_32
    
    Similar to x86 64-bit.
    
    Signed-off-by: Harvey Harrison <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
---
 arch/x86/mm/fault_32.c |   72 ++++++++++++++++++++++++++----------------------
 1 files changed, 39 insertions(+), 33 deletions(-)

diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c
index 93ede2d..41c3196 100644
--- a/arch/x86/mm/fault_32.c
+++ b/arch/x86/mm/fault_32.c
@@ -173,6 +173,44 @@ static void force_sig_info_fault(int si_signo, int si_code,
        force_sig_info(si_signo, &info, tsk);
 }
 
+void dump_pagetable(unsigned long address)
+{
+       __typeof__(pte_val(__pte(0))) page;
+
+       page = read_cr3();
+       page = ((__typeof__(page) *) __va(page))[address >> PGDIR_SHIFT];
+#ifdef CONFIG_X86_PAE
+       printk("*pdpt = %016Lx ", page);
+       if ((page >> PAGE_SHIFT) < max_low_pfn
+           && page & _PAGE_PRESENT) {
+               page &= PAGE_MASK;
+               page = ((__typeof__(page) *) __va(page))[(address >> PMD_SHIFT)
+                                                        & (PTRS_PER_PMD - 1)];
+               printk(KERN_CONT "*pde = %016Lx ", page);
+               page &= ~_PAGE_NX;
+       }
+#else
+       printk("*pde = %08lx ", page);
+#endif
+
+       /*
+        * We must not directly access the pte in the highpte
+        * case if the page table is located in highmem.
+        * And let's rather not kmap-atomic the pte, just in case
+        * it's allocated already.
+        */
+       if ((page >> PAGE_SHIFT) < max_low_pfn
+           && (page & _PAGE_PRESENT)
+           && !(page & _PAGE_PSE)) {
+               page &= PAGE_MASK;
+               page = ((__typeof__(page) *) __va(page))[(address >> PAGE_SHIFT)
+                                                        & (PTRS_PER_PTE - 1)];
+               printk("*pte = %0*Lx ", sizeof(page)*2, (u64)page);
+       }
+
+       printk("\n");
+}
+
 void do_invalid_op(struct pt_regs *, unsigned long);
 
 static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)
@@ -572,7 +610,6 @@ no_context:
        bust_spinlocks(1);
 
        if (oops_may_print()) {
-               __typeof__(pte_val(__pte(0))) page;
 
 #ifdef CONFIG_X86_PAE
                if (error_code & PF_INSTR) {
@@ -593,38 +630,7 @@ no_context:
                printk(" at virtual address %08lx\n", address);
                printk(KERN_ALERT "printing ip: %08lx ", regs->ip);
 
-               page = read_cr3();
-               page = ((__typeof__(page) *) __va(page))[address >> 
PGDIR_SHIFT];
-#ifdef CONFIG_X86_PAE
-               printk("*pdpt = %016Lx ", page);
-               if ((page >> PAGE_SHIFT) < max_low_pfn
-                   && page & _PAGE_PRESENT) {
-                       page &= PAGE_MASK;
-                       page = ((__typeof__(page) *) __va(page))[(address >> 
PMD_SHIFT)
-                                                                & 
(PTRS_PER_PMD - 1)];
-                       printk(KERN_CONT "*pde = %016Lx ", page);
-                       page &= ~_PAGE_NX;
-               }
-#else
-               printk("*pde = %08lx ", page);
-#endif
-
-               /*
-                * We must not directly access the pte in the highpte
-                * case if the page table is located in highmem.
-                * And let's rather not kmap-atomic the pte, just in case
-                * it's allocated already.
-                */
-               if ((page >> PAGE_SHIFT) < max_low_pfn
-                   && (page & _PAGE_PRESENT)
-                   && !(page & _PAGE_PSE)) {
-                       page &= PAGE_MASK;
-                       page = ((__typeof__(page) *) __va(page))[(address >> 
PAGE_SHIFT)
-                                                                & 
(PTRS_PER_PTE - 1)];
-                       printk("*pte = %0*Lx ", sizeof(page)*2, (u64)page);
-               }
-
-               printk("\n");
+               dump_pagetable(address);
        }
 
        tsk->thread.cr2 = address;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to