diff mbox

mwifiex: fix Tx timeout issue during suspend test

Message ID 1458139576-4702-1-git-send-email-akarwar@marvell.com (mailing list archive)
State Accepted
Delegated to: Kalle Valo
Headers show

Commit Message

Amitkumar Karwar March 16, 2016, 2:46 p.m. UTC
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>
---
 drivers/net/wireless/marvell/mwifiex/cfg80211.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Amitkumar Karwar March 31, 2016, 11:36 a.m. UTC | #1
Hi Kalle,

> From: Amitkumar Karwar [mailto:akarwar@marvell.com]
> Sent: Wednesday, March 16, 2016 8:16 PM
> To: linux-wireless@vger.kernel.org
> Cc: Nishant Sarmukadam; Amitkumar Karwar
> Subject: [PATCH] mwifiex: fix Tx timeout issue during suspend test
> 
> 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>
> ---
>  drivers/net/wireless/marvell/mwifiex/cfg80211.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> index bb7235e..b0663bd 100644
> --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> @@ -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);
> --
> 1.8.1.4


Could you please take this patch? It fixes an issue introduced by "mwifiex: Empty Tx queue during suspend"

Regards,
Amitkumar
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kalle Valo April 6, 2016, 6:28 p.m. UTC | #2
> 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>

Thanks, applied to wireless-drivers-next.git.

Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index bb7235e..b0663bd 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -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);