瀏覽代碼

MCE: Don't run 32bit machine checks with interrupts on

Running machine checks with interrupt on is a extremly bad idea. The machine
check handler only runs when the system is broken and needs to finish
as quickly as possible.

Remove the respective bogus post 2.6.27 regression and call
the machine check vector directly again.

This removes only code.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
[Cherry-picked from x86/mce]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Andi Kleen 16 年之前
父節點
當前提交
d2f6f7aeee
共有 2 個文件被更改,包括 1 次插入9 次删除
  1. 1 1
      arch/x86/kernel/entry_32.S
  2. 0 8
      arch/x86/kernel/traps.c

+ 1 - 1
arch/x86/kernel/entry_32.S

@@ -1024,7 +1024,7 @@ ENTRY(machine_check)
 	RING0_INT_FRAME
 	RING0_INT_FRAME
 	pushl $0
 	pushl $0
 	CFI_ADJUST_CFA_OFFSET 4
 	CFI_ADJUST_CFA_OFFSET 4
-	pushl $do_machine_check
+	pushl machine_check_vector
 	CFI_ADJUST_CFA_OFFSET 4
 	CFI_ADJUST_CFA_OFFSET 4
 	jmp error_code
 	jmp error_code
 	CFI_ENDPROC
 	CFI_ENDPROC

+ 0 - 8
arch/x86/kernel/traps.c

@@ -931,14 +931,6 @@ do_device_not_available(struct pt_regs *regs, long error)
 }
 }
 
 
 #ifdef CONFIG_X86_32
 #ifdef CONFIG_X86_32
-#ifdef CONFIG_X86_MCE
-dotraplinkage void __kprobes do_machine_check(struct pt_regs *regs, long error)
-{
-	conditional_sti(regs);
-	machine_check_vector(regs, error);
-}
-#endif
-
 dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code)
 dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code)
 {
 {
 	siginfo_t info;
 	siginfo_t info;