aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/sfc/efx.c
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2012-07-27 14:35:47 -0400
committerBen Hutchings <bhutchings@solarflare.com>2012-08-24 15:10:19 -0400
commit6032fb56c546c0a14856dc57a92d84560816b217 (patch)
treeea0c5b0ead5581665cc540e4d620e9487a32ea7e /drivers/net/ethernet/sfc/efx.c
parent61da026d86517def727eb67d7cb8ee5657a12dd9 (diff)
sfc: Keep disabled NICs quiescent during suspend/resume
Currently we ignore and clear the disabled state. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Diffstat (limited to 'drivers/net/ethernet/sfc/efx.c')
-rw-r--r--drivers/net/ethernet/sfc/efx.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index e5f3a17349af..f02591bb62f4 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -2729,12 +2729,14 @@ static int efx_pm_freeze(struct device *dev)
2729 2729
2730 rtnl_lock(); 2730 rtnl_lock();
2731 2731
2732 efx->state = STATE_UNINIT; 2732 if (efx->state != STATE_DISABLED) {
2733 efx->state = STATE_UNINIT;
2733 2734
2734 netif_device_detach(efx->net_dev); 2735 netif_device_detach(efx->net_dev);
2735 2736
2736 efx_stop_all(efx); 2737 efx_stop_all(efx);
2737 efx_stop_interrupts(efx, false); 2738 efx_stop_interrupts(efx, false);
2739 }
2738 2740
2739 rtnl_unlock(); 2741 rtnl_unlock();
2740 2742
@@ -2747,19 +2749,21 @@ static int efx_pm_thaw(struct device *dev)
2747 2749
2748 rtnl_lock(); 2750 rtnl_lock();
2749 2751
2750 efx_start_interrupts(efx, false); 2752 if (efx->state != STATE_DISABLED) {
2753 efx_start_interrupts(efx, false);
2751 2754
2752 mutex_lock(&efx->mac_lock); 2755 mutex_lock(&efx->mac_lock);
2753 efx->phy_op->reconfigure(efx); 2756 efx->phy_op->reconfigure(efx);
2754 mutex_unlock(&efx->mac_lock); 2757 mutex_unlock(&efx->mac_lock);
2755 2758
2756 efx_start_all(efx); 2759 efx_start_all(efx);
2757 2760
2758 netif_device_attach(efx->net_dev); 2761 netif_device_attach(efx->net_dev);
2759 2762
2760 efx->state = STATE_READY; 2763 efx->state = STATE_READY;
2761 2764
2762 efx->type->resume_wol(efx); 2765 efx->type->resume_wol(efx);
2766 }
2763 2767
2764 rtnl_unlock(); 2768 rtnl_unlock();
2765 2769