Commit b5975917 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Tony Luck

x86: mce: Serialize mce injection

raise_mce() fiddles with global state, but lacks any kind of
serialization.

Add a mutex around the raise_mce() call, so concurrent writers do not
stomp on each other toes.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarChen Gong <gong.chen@linux.intel.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent ea22571c
...@@ -78,6 +78,7 @@ static void raise_exception(struct mce *m, struct pt_regs *pregs) ...@@ -78,6 +78,7 @@ static void raise_exception(struct mce *m, struct pt_regs *pregs)
} }
static cpumask_var_t mce_inject_cpumask; static cpumask_var_t mce_inject_cpumask;
static DEFINE_MUTEX(mce_inject_mutex);
static int mce_raise_notify(unsigned int cmd, struct pt_regs *regs) static int mce_raise_notify(unsigned int cmd, struct pt_regs *regs)
{ {
...@@ -229,7 +230,10 @@ static ssize_t mce_write(struct file *filp, const char __user *ubuf, ...@@ -229,7 +230,10 @@ static ssize_t mce_write(struct file *filp, const char __user *ubuf,
* so do it a jiffie or two later everywhere. * so do it a jiffie or two later everywhere.
*/ */
schedule_timeout(2); schedule_timeout(2);
mutex_lock(&mce_inject_mutex);
raise_mce(&m); raise_mce(&m);
mutex_unlock(&mce_inject_mutex);
return usize; return usize;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment