diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2012-07-19 19:59:37 +0200 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2012-08-03 20:45:20 +0200 |
commit | ea22571c8fd912f28e2525f7112bbb84b474ff3a (patch) | |
tree | 6828731f26c15ed0c862807c65934a9e2c6a127d /arch/x86 | |
parent | Linux 3.6-rc1 (diff) | |
download | linux-ea22571c8fd912f28e2525f7112bbb84b474ff3a.tar.xz linux-ea22571c8fd912f28e2525f7112bbb84b474ff3a.zip |
x86: mce: Disable preemption when calling raise_local()
raise_mce() has a code path which does not disable preemption when the
raise_local() is called. The per cpu variable access in raise_local()
depends on preemption being disabled to be functional. So that code
path was either never tested or never tested with CONFIG_DEBUG_PREEMPT
enabled.
Add the missing preempt_disable/enable() pair around the call.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Chen Gong <gong.chen@linux.intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce-inject.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce-inject.c b/arch/x86/kernel/cpu/mcheck/mce-inject.c index fc4beb393577..753746f6dbd8 100644 --- a/arch/x86/kernel/cpu/mcheck/mce-inject.c +++ b/arch/x86/kernel/cpu/mcheck/mce-inject.c @@ -194,7 +194,11 @@ static void raise_mce(struct mce *m) put_online_cpus(); } else #endif + { + preempt_disable(); raise_local(); + preempt_enable(); + } } /* Error injection interface */ |