diff options
| author | Andi Kleen <andi@firstfloor.org> | 2009-02-12 07:39:33 -0500 |
|---|---|---|
| committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-02-17 18:24:31 -0500 |
| commit | 380851bc6b1b4107c61dfa2997f9095dcf779336 (patch) | |
| tree | 1b80fb980d33323421d8d3e76965d3f798756520 | |
| parent | 6ec68bff3c81e776a455f6aca95c8c5f1d630198 (diff) | |
x86, mce: use force_sig_info to kill process in machine check
Impact: bug fix (with tolerant == 3)
do_exit cannot be called directly from the exception handler because
it can sleep and the exception handler runs on the exception stack.
Use force_sig() instead.
Based on a earlier patch by Ying Huang who debugged the problem.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
| -rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce_64.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c index 1f184efb6bc2..25cf624eccb7 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_64.c | |||
| @@ -295,11 +295,11 @@ void do_machine_check(struct pt_regs * regs, long error_code) | |||
| 295 | * If we know that the error was in user space, send a | 295 | * If we know that the error was in user space, send a |
| 296 | * SIGBUS. Otherwise, panic if tolerance is low. | 296 | * SIGBUS. Otherwise, panic if tolerance is low. |
| 297 | * | 297 | * |
| 298 | * do_exit() takes an awful lot of locks and has a slight | 298 | * force_sig() takes an awful lot of locks and has a slight |
| 299 | * risk of deadlocking. | 299 | * risk of deadlocking. |
| 300 | */ | 300 | */ |
| 301 | if (user_space) { | 301 | if (user_space) { |
| 302 | do_exit(SIGBUS); | 302 | force_sig(SIGBUS, current); |
| 303 | } else if (panic_on_oops || tolerant < 2) { | 303 | } else if (panic_on_oops || tolerant < 2) { |
| 304 | mce_panic("Uncorrected machine check", | 304 | mce_panic("Uncorrected machine check", |
| 305 | &panicm, mcestart); | 305 | &panicm, mcestart); |
