Merge MoCA 2.10.4.6

Conflicts:
	bmoca-6802.c

Change-Id: I52f7015d37095c8fa450f52cf1ab760c96a9075f
diff --git a/3.3/bmoca.c b/3.3/bmoca.c
index c39fa17..a35c479 100644
--- a/3.3/bmoca.c
+++ b/3.3/bmoca.c
@@ -1457,6 +1457,8 @@
 	u32 mask = 0;
 	int ret, stopped = 0;
 
+	mutex_lock(&priv->dev_mutex);
+
 	if (priv->enabled) {
 		mask = moca_irq_status(priv, FLUSH_IRQ);
 		if (mask & M2H_DMA) {
@@ -1476,6 +1478,7 @@
 		}
 
 		if (mask == 0) {
+			mutex_unlock(&priv->dev_mutex);
 			moca_enable_irq(priv);
 			return;
 		}
@@ -1484,14 +1487,13 @@
 			M2H_REQ_CPU0 | M2H_RESP_CPU0)) {
 			if (moca_get_mbx_offset(priv)) {
 				/* mbx interrupt but mbx_offset is bogus?? */
+				mutex_unlock(&priv->dev_mutex);
 				moca_enable_irq(priv);
 				return;
 			}
 		}
 	}
 
-	mutex_lock(&priv->dev_mutex);
-
 	if (!priv->running) {
 		stopped = 1;
 	} else {
diff --git a/3.8/bmoca.c b/3.8/bmoca.c
index 08812d9..b55a926 100644
--- a/3.8/bmoca.c
+++ b/3.8/bmoca.c
@@ -1332,6 +1332,8 @@
 	u32 mask = 0;
 	int ret, stopped = 0;
 
+	mutex_lock(&priv->dev_mutex);
+
 	if (priv->enabled) {
 		mask = moca_irq_status(priv, FLUSH_IRQ);
 		if (mask & M2H_DMA) {
@@ -1350,6 +1352,7 @@
 		}
 
 		if (mask == 0) {
+			mutex_unlock(&priv->dev_mutex);
 			moca_enable_irq(priv);
 			return;
 		}
@@ -1358,14 +1361,13 @@
 			M2H_REQ_CPU0 | M2H_RESP_CPU0)) {
 			if (moca_get_mbx_offset(priv)) {
 				/* mbx interrupt but mbx_offset is bogus?? */
+				mutex_unlock(&priv->dev_mutex);
 				moca_enable_irq(priv);
 				return;
 			}
 		}
 	}
 
-	mutex_lock(&priv->dev_mutex);
-
 	if (!priv->running) {
 		stopped = 1;
 	} else {