msm: sdio_cmux: prevent probe() concurrency
Multiple instances of the probe function cannot run concurrently, so
add a mutex to force sequential execution.
Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
diff --git a/arch/arm/mach-msm/sdio_cmux.c b/arch/arm/mach-msm/sdio_cmux.c
index f6e8f40..c47e563 100644
--- a/arch/arm/mach-msm/sdio_cmux.c
+++ b/arch/arm/mach-msm/sdio_cmux.c
@@ -116,6 +116,8 @@
static uint32_t abort_tx;
static DEFINE_MUTEX(modem_reset_lock);
+static DEFINE_MUTEX(probe_lock);
+
enum {
MSM_SDIO_CMUX_DEBUG = 1U << 0,
MSM_SDIO_CMUX_DUMP_BUFFER = 1U << 1,
@@ -765,6 +767,7 @@
{
int i, r;
+ mutex_lock(&probe_lock);
D("%s Begins\n", __func__);
if (sdio_cmux_inited) {
mutex_lock(&modem_reset_lock);
@@ -777,6 +780,7 @@
}
abort_tx = 0;
mutex_unlock(&modem_reset_lock);
+ mutex_unlock(&probe_lock);
return 0;
}
@@ -809,6 +813,7 @@
platform_device_register(&sdio_ctl_dev);
sdio_cmux_inited = 1;
D("SDIO Control MUX Driver Initialized.\n");
+ mutex_unlock(&probe_lock);
return 0;
error2:
@@ -816,6 +821,7 @@
error1:
destroy_workqueue(sdio_cmux_wq);
error0:
+ mutex_unlock(&probe_lock);
return r;
}