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;
 }