diff options
Diffstat (limited to 'arch/x86/mm/fault_64.c')
-rw-r--r-- | arch/x86/mm/fault_64.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c index 5149ac136a5d..00be7f0a71b2 100644 --- a/arch/x86/mm/fault_64.c +++ b/arch/x86/mm/fault_64.c | |||
@@ -169,7 +169,7 @@ void dump_pagetable(unsigned long address) | |||
169 | pmd = pmd_offset(pud, address); | 169 | pmd = pmd_offset(pud, address); |
170 | if (bad_address(pmd)) goto bad; | 170 | if (bad_address(pmd)) goto bad; |
171 | printk("PMD %lx ", pmd_val(*pmd)); | 171 | printk("PMD %lx ", pmd_val(*pmd)); |
172 | if (!pmd_present(*pmd)) goto ret; | 172 | if (!pmd_present(*pmd) || pmd_large(*pmd)) goto ret; |
173 | 173 | ||
174 | pte = pte_offset_kernel(pmd, address); | 174 | pte = pte_offset_kernel(pmd, address); |
175 | if (bad_address(pte)) goto bad; | 175 | if (bad_address(pte)) goto bad; |
@@ -285,7 +285,6 @@ static int vmalloc_fault(unsigned long address) | |||
285 | return 0; | 285 | return 0; |
286 | } | 286 | } |
287 | 287 | ||
288 | static int page_fault_trace; | ||
289 | int show_unhandled_signals = 1; | 288 | int show_unhandled_signals = 1; |
290 | 289 | ||
291 | /* | 290 | /* |
@@ -354,10 +353,6 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, | |||
354 | if (likely(regs->eflags & X86_EFLAGS_IF)) | 353 | if (likely(regs->eflags & X86_EFLAGS_IF)) |
355 | local_irq_enable(); | 354 | local_irq_enable(); |
356 | 355 | ||
357 | if (unlikely(page_fault_trace)) | ||
358 | printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n", | ||
359 | regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); | ||
360 | |||
361 | if (unlikely(error_code & PF_RSVD)) | 356 | if (unlikely(error_code & PF_RSVD)) |
362 | pgtable_bad(address, regs, error_code); | 357 | pgtable_bad(address, regs, error_code); |
363 | 358 | ||
@@ -488,7 +483,7 @@ bad_area_nosemaphore: | |||
488 | if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) && | 483 | if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) && |
489 | printk_ratelimit()) { | 484 | printk_ratelimit()) { |
490 | printk( | 485 | printk( |
491 | "%s%s[%d]: segfault at %016lx rip %016lx rsp %016lx error %lx\n", | 486 | "%s%s[%d]: segfault at %lx rip %lx rsp %lx error %lx\n", |
492 | tsk->pid > 1 ? KERN_INFO : KERN_EMERG, | 487 | tsk->pid > 1 ? KERN_INFO : KERN_EMERG, |
493 | tsk->comm, tsk->pid, address, regs->rip, | 488 | tsk->comm, tsk->pid, address, regs->rip, |
494 | regs->rsp, error_code); | 489 | regs->rsp, error_code); |
@@ -621,10 +616,3 @@ void vmalloc_sync_all(void) | |||
621 | BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == | 616 | BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == |
622 | (__START_KERNEL & PGDIR_MASK))); | 617 | (__START_KERNEL & PGDIR_MASK))); |
623 | } | 618 | } |
624 | |||
625 | static int __init enable_pagefaulttrace(char *str) | ||
626 | { | ||
627 | page_fault_trace = 1; | ||
628 | return 1; | ||
629 | } | ||
630 | __setup("pagefaulttrace", enable_pagefaulttrace); | ||