mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
sfc: Hold MAC lock for longer in efx_init_port()
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> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
26deba5013
commit
1dfc5ceacd
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user