mwifiex: fix Tx timeout issue during suspend test
authorAmitkumar Karwar <akarwar@marvell.com>
Wed, 16 Mar 2016 14:46:16 +0000 (07:46 -0700)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 6 Apr 2016 18:27:50 +0000 (21:27 +0300)
Call netif_carrier_off/on while stoping/starting netdev queues.
This fixes netdev watchdog warning and ->ndo_tx_timeout() invocation
during suspend resume stress test.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Fixes: 54f008497b9f09f ('mwifiex: Empty Tx queue during suspend')
Tested-by: Wei-Ning Huang <wnhuang@chromium.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/cfg80211.c

index bb7235e..b0663bd 100644 (file)
@@ -3272,8 +3272,11 @@ static int mwifiex_cfg80211_suspend(struct wiphy *wiphy,
 
        for (i = 0; i < adapter->priv_num; i++) {
                priv = adapter->priv[i];
-               if (priv && priv->netdev)
+               if (priv && priv->netdev) {
                        mwifiex_stop_net_dev_queue(priv->netdev, adapter);
+                       if (netif_carrier_ok(priv->netdev))
+                               netif_carrier_off(priv->netdev);
+               }
        }
 
        for (i = 0; i < retry_num; i++) {
@@ -3344,8 +3347,11 @@ static int mwifiex_cfg80211_resume(struct wiphy *wiphy)
 
        for (i = 0; i < adapter->priv_num; i++) {
                priv = adapter->priv[i];
-               if (priv && priv->netdev)
+               if (priv && priv->netdev) {
+                       if (!netif_carrier_ok(priv->netdev))
+                               netif_carrier_on(priv->netdev);
                        mwifiex_wake_up_net_dev_queue(priv->netdev, adapter);
+               }
        }
 
        priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA);