x86: fix prefetch workaround
authorIngo Molnar <mingo@elte.hu>
Thu, 27 Mar 2008 14:58:28 +0000 (15:58 +0100)
committerIngo Molnar <mingo@elte.hu>
Thu, 27 Mar 2008 15:08:44 +0000 (16:08 +0100)
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>
arch/x86/mm/fault.c

index fdc667422df9913f2f5d861a3e80fad14eab7f4d..c0c82bc143c98966e9e5e88634560096b5ae4923 100644 (file)
@@ -92,7 +92,8 @@ static int is_prefetch(struct pt_regs *regs, unsigned long addr,
        unsigned char *max_instr;
 
 #ifdef CONFIG_X86_32
        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
 
                return 0;
 #endif