summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2015-10-12 13:19:48 +0200
committerDarren Hart <dvhart@linux.intel.com>2015-10-15 17:23:30 +0200
commit9d1d459bf52b4a07a934558e055bb61ad82f44cd (patch)
tree9287729f176fa526c3aaadc99d96144d065fa9a9
parentintel_scu_ipc: Switch to use module_pci_driver() macro (diff)
downloadlinux-9d1d459bf52b4a07a934558e055bb61ad82f44cd.tar.xz
linux-9d1d459bf52b4a07a934558e055bb61ad82f44cd.zip
intel_scu_ipc: Protect dev member assignment on ->remove()
Protect the dev member assignment in ->remove() since user may potentially call unbind from a sysfs even if the driver is built-in. The latter might be racy with ongoing SCU communication. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
-rw-r--r--drivers/platform/x86/intel_scu_ipc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c
index 9de2029aa909..f94b730540e2 100644
--- a/drivers/platform/x86/intel_scu_ipc.c
+++ b/drivers/platform/x86/intel_scu_ipc.c
@@ -625,7 +625,10 @@ static void ipc_remove(struct pci_dev *pdev)
{
struct intel_scu_ipc_dev *scu = pci_get_drvdata(pdev);
+ mutex_lock(&ipclock);
scu->dev = NULL;
+ mutex_unlock(&ipclock);
+
iounmap(scu->i2c_base);
intel_scu_devices_destroy();
}