aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-02-20 17:39:02 -0500
committerIngo Molnar <mingo@elte.hu>2009-02-20 18:09:46 -0500
commitcd1b68f08f6328737928e5b8ba8ef80394680ff0 (patch)
tree049aa8e9cd982cb7325cb70e9fdecdfce1a010f3 /arch/x86
parent7c178a26d3e753d2a4346d3e4b8aa549d387f698 (diff)
x86, mm: fault.c, give another attempt at prefetch handing before SIGBUS
Impact: extend prefetch handling on 64-bit Currently there's an extra is_prefetch() check done in do_sigbus(), which we only do on 32 bits. This is a last-ditch check before we terminate a task, so it's worth giving prefetch instructions another chance - should none of our existing quirks have caught a prefetch instruction related spurious fault. The only risk is if a prefetch causes a real sigbus, in that case we'll not OOM but try another fault. But this code has been on 32-bit for a long time, so it should be fine in practice. So do this on 64-bit too - and thus remove one more #ifdef. Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/mm/fault.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index f195691ec26e..413e835e4a80 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -836,11 +836,9 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address)
836 if (!(error_code & PF_USER)) 836 if (!(error_code & PF_USER))
837 no_context(regs, error_code, address); 837 no_context(regs, error_code, address);
838 838
839#ifdef CONFIG_X86_32 839 /* User-space => ok to do another page fault: */
840 /* User space => ok to do another page fault: */
841 if (is_prefetch(regs, error_code, address)) 840 if (is_prefetch(regs, error_code, address))
842 return; 841 return;
843#endif
844 842
845 tsk->thread.cr2 = address; 843 tsk->thread.cr2 = address;
846 tsk->thread.error_code = error_code; 844 tsk->thread.error_code = error_code;