2011-04-28 10:02:04

by Rajkumar Manoharan

[permalink] [raw]
Subject: [PATCH] ath9k: Fix drain txq failure in flush

While draining the txq in flush, the buffers can be
added into the tx queue by tx_tasklet which leads to
unneccesary chip reset.

This issue was originially found with AR9382 and
running heavy uplink udp traffic with higher bandwidth
and doing frequent bgscan.

Cc: [email protected]
Signed-off-by: Vasanthakumar Thiagarajan <[email protected]>
Signed-off-by: Rajkumar Manoharan <[email protected]>
---
drivers/net/wireless/ath/ath9k/main.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index c3dbf26..efdafd2 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -2261,6 +2261,7 @@ static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
struct ath_softc *sc = hw->priv;
int timeout = 200; /* ms */
int i, j;
+ bool drain_txq;

mutex_lock(&sc->mutex);
cancel_delayed_work_sync(&sc->tx_complete_work);
@@ -2286,7 +2287,10 @@ static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
}

ath9k_ps_wakeup(sc);
- if (!ath_drain_all_txq(sc, false))
+ spin_lock_bh(&sc->sc_pcu_lock);
+ drain_txq = ath_drain_all_txq(sc, false);
+ spin_unlock_bh(&sc->sc_pcu_lock);
+ if (!drain_txq)
ath_reset(sc, false);
ath9k_ps_restore(sc);
ieee80211_wake_queues(hw);
--
1.7.5



2011-04-29 19:30:51

by John W. Linville

[permalink] [raw]
Subject: Re: [PATCH] ath9k: Fix drain txq failure in flush

On Thu, Apr 28, 2011 at 03:31:57PM +0530, Rajkumar Manoharan wrote:
> While draining the txq in flush, the buffers can be
> added into the tx queue by tx_tasklet which leads to
> unneccesary chip reset.
>
> This issue was originially found with AR9382 and
> running heavy uplink udp traffic with higher bandwidth
> and doing frequent bgscan.
>
> Cc: [email protected]
> Signed-off-by: Vasanthakumar Thiagarajan <[email protected]>
> Signed-off-by: Rajkumar Manoharan <[email protected]>

Should this be a fix for 2.6.39?

--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.

2011-05-02 04:34:24

by Rajkumar Manoharan

[permalink] [raw]
Subject: Re: [PATCH] ath9k: Fix drain txq failure in flush

On Sat, Apr 30, 2011 at 12:57:51AM +0530, John W. Linville wrote:
> On Thu, Apr 28, 2011 at 03:31:57PM +0530, Rajkumar Manoharan wrote:
> > While draining the txq in flush, the buffers can be
> > added into the tx queue by tx_tasklet which leads to
> > unneccesary chip reset.
> >
> > This issue was originially found with AR9382 and
> > running heavy uplink udp traffic with higher bandwidth
> > and doing frequent bgscan.
> >
> > Cc: [email protected]
> > Signed-off-by: Vasanthakumar Thiagarajan <[email protected]>
> > Signed-off-by: Rajkumar Manoharan <[email protected]>
>
> Should this be a fix for 2.6.39?
>
Yes. This patch is meant for 2.6.39 only.

--
Rajkumar