aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/fault.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/mm/fault.c')
-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 f62777940dfb..60a0aa574dc6 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -554,6 +554,7 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address)
554 nr = (address - idt_descr.address) >> 3; 554 nr = (address - idt_descr.address) >> 3;
555 555
556 if (nr == 6) { 556 if (nr == 6) {
557 zap_rt_locks();
557 do_invalid_op(regs, 0); 558 do_invalid_op(regs, 0);
558 return 1; 559 return 1;
559 } 560 }
@@ -1035,7 +1036,7 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code)
1035 * If we're in an interrupt, have no user context or are running 1036 * If we're in an interrupt, have no user context or are running
1036 * in an atomic region then we must not take the fault: 1037 * in an atomic region then we must not take the fault:
1037 */ 1038 */
1038 if (unlikely(in_atomic() || !mm)) { 1039 if (unlikely(in_atomic() || !mm || current->pagefault_disabled)) {
1039 bad_area_nosemaphore(regs, error_code, address); 1040 bad_area_nosemaphore(regs, error_code, address);
1040 return; 1041 return;
1041 } 1042 }