summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-03-27 15:58:28 +0100
committerIngo Molnar <mingo@elte.hu>2008-03-27 16:08:44 +0100
commitbc713dcf35c427ae8377fb9a4d1b7f891054ce13 (patch)
treed129b92986076190576935d8ceb09062db58453e
parent08dcf29e01dcb786c13dc80045bd65f804117efb (diff)
downloadlinux-bc713dcf35c427ae8377fb9a4d1b7f891054ce13.tar.gz
linux-bc713dcf35c427ae8377fb9a4d1b7f891054ce13.tar.bz2
linux-bc713dcf35c427ae8377fb9a4d1b7f891054ce13.zip
x86: fix prefetch workaround
some early Athlon XP's and Opterons generate bogus faults on prefetch instructions. The workaround for this regressed over .24 - reinstate it. Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/mm/fault.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index fdc667422df9..c0c82bc143c9 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -92,7 +92,8 @@ static int is_prefetch(struct pt_regs *regs, unsigned long addr,
unsigned char *max_instr;
#ifdef CONFIG_X86_32
- if (!(__supported_pte_mask & _PAGE_NX))
+ /* Catch an obscure case of prefetch inside an NX page: */
+ if ((__supported_pte_mask & _PAGE_NX) && (error_code & 16))
return 0;
#endif