Commit f95190b2 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] x86_64: Remove unnecessary case from the page fault handler

Don't need to do the vmalloc check for the module range because its
PML4 is shared with the kernel text.

Also removed an unnecessary TLB flush.

Pointed out by Jan Beulich

Cc: jbeulich@novell.com
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c11efdf9
...@@ -237,7 +237,7 @@ static noinline void pgtable_bad(unsigned long address, struct pt_regs *regs, ...@@ -237,7 +237,7 @@ static noinline void pgtable_bad(unsigned long address, struct pt_regs *regs,
} }
/* /*
* Handle a fault on the vmalloc or module mapping area * Handle a fault on the vmalloc area
* *
* This assumes no large pages in there. * This assumes no large pages in there.
*/ */
...@@ -283,7 +283,6 @@ static int vmalloc_fault(unsigned long address) ...@@ -283,7 +283,6 @@ static int vmalloc_fault(unsigned long address)
that. */ that. */
if (!pte_present(*pte) || pte_pfn(*pte) != pte_pfn(*pte_ref)) if (!pte_present(*pte) || pte_pfn(*pte) != pte_pfn(*pte_ref))
BUG(); BUG();
__flush_tlb_all();
return 0; return 0;
} }
...@@ -346,9 +345,13 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, ...@@ -346,9 +345,13 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
* protection error (error_code & 9) == 0. * protection error (error_code & 9) == 0.
*/ */
if (unlikely(address >= TASK_SIZE64)) { if (unlikely(address >= TASK_SIZE64)) {
/*
* Don't check for the module range here: its PML4
* is always initialized because it's shared with the main
* kernel text. Only vmalloc may need PML4 syncups.
*/
if (!(error_code & 0xd) && if (!(error_code & 0xd) &&
((address >= VMALLOC_START && address < VMALLOC_END) || ((address >= VMALLOC_START && address < VMALLOC_END))) {
(address >= MODULES_VADDR && address < MODULES_END))) {
if (vmalloc_fault(address) < 0) if (vmalloc_fault(address) < 0)
goto bad_area_nosemaphore; goto bad_area_nosemaphore;
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment