]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
x86: mce: Serialize mce injection
authorThomas Gleixner <tglx@linutronix.de>
Thu, 19 Jul 2012 17:59:38 +0000 (13:59 -0400)
committerTony Luck <tony.luck@intel.com>
Fri, 3 Aug 2012 18:45:56 +0000 (11:45 -0700)
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: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Chen Gong <gong.chen@linux.intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/x86/kernel/cpu/mcheck/mce-inject.c

index 753746f6dbd8072f186669d9dd6b43177a19308e..ddc72f8393321de0ca989d2476f7ccd96eed3639 100644 (file)
@@ -78,6 +78,7 @@ static void raise_exception(struct mce *m, struct pt_regs *pregs)
 }
 
 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)
 {
@@ -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.
         */
        schedule_timeout(2);
+
+       mutex_lock(&mce_inject_mutex);
        raise_mce(&m);
+       mutex_unlock(&mce_inject_mutex);
        return usize;
 }