diff mbox

[10/16] sfc: Hold MAC lock for longer in efx_init_port()

Message ID 1259201479.2806.23.camel@achroite.uk.solarflarecom.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Ben Hutchings Nov. 26, 2009, 2:11 a.m. UTC
Although efx_init_port() is only called at probe time and so cannot
race with port reconfiguration, most of the functions it calls can
expect to be called with the MAC lock held.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
 drivers/net/sfc/efx.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)
diff mbox

Patch

diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c
index 4ebad61..155aa1c 100644
--- a/drivers/net/sfc/efx.c
+++ b/drivers/net/sfc/efx.c
@@ -737,23 +737,27 @@  static int efx_init_port(struct efx_nic *efx)
 
 	EFX_LOG(efx, "init port\n");
 
+	mutex_lock(&efx->mac_lock);
+
 	rc = efx->phy_op->init(efx);
 	if (rc)
-		return rc;
-	mutex_lock(&efx->mac_lock);
+		goto fail1;
 	efx->phy_op->reconfigure(efx);
 	rc = falcon_switch_mac(efx);
-	mutex_unlock(&efx->mac_lock);
 	if (rc)
-		goto fail;
+		goto fail2;
 	efx->mac_op->reconfigure(efx);
 
 	efx->port_initialized = true;
 	efx_stats_enable(efx);
+
+	mutex_unlock(&efx->mac_lock);
 	return 0;
 
-fail:
+fail2:
 	efx->phy_op->fini(efx);
+fail1:
+	mutex_unlock(&efx->mac_lock);
 	return rc;
 }