aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/300-pending_work.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-10-05 12:12:57 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-10-05 12:12:57 +0000
commiteb06ee48465370e5e0723d265da173e721216203 (patch)
tree3419c4e081c38aa535ac908481ea6c6501a102a7 /package/mac80211/patches/300-pending_work.patch
parent90f68a633fb95b3673a35e1e965669feb9cd5ee7 (diff)
downloadupstream-eb06ee48465370e5e0723d265da173e721216203.tar.gz
upstream-eb06ee48465370e5e0723d265da173e721216203.tar.bz2
upstream-eb06ee48465370e5e0723d265da173e721216203.zip
ath9k: fix tx queueing issues after background scans
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Backport of r38304 git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@38305 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r--package/mac80211/patches/300-pending_work.patch49
1 files changed, 48 insertions, 1 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index be7b52a8df..127e777950 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -383,7 +383,54 @@
static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2094,7 +2094,7 @@ static void ath9k_wow_add_pattern(struct
+@@ -209,6 +209,7 @@ static bool ath_complete_reset(struct at
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+ unsigned long flags;
++ int i;
+
+ if (ath_startrecv(sc) != 0) {
+ ath_err(common, "Unable to restart recv logic\n");
+@@ -236,6 +237,15 @@ static bool ath_complete_reset(struct at
+ }
+ work:
+ ath_restart_work(sc);
++
++ for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
++ if (!ATH_TXQ_SETUP(sc, i))
++ continue;
++
++ spin_lock_bh(&sc->tx.txq[i].axq_lock);
++ ath_txq_schedule(sc, &sc->tx.txq[i]);
++ spin_unlock_bh(&sc->tx.txq[i].axq_lock);
++ }
+ }
+
+ if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx != 3)
+@@ -543,21 +553,10 @@ chip_reset:
+
+ static int ath_reset(struct ath_softc *sc)
+ {
+- int i, r;
++ int r;
+
+ ath9k_ps_wakeup(sc);
+-
+ r = ath_reset_internal(sc, NULL);
+-
+- for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
+- if (!ATH_TXQ_SETUP(sc, i))
+- continue;
+-
+- spin_lock_bh(&sc->tx.txq[i].axq_lock);
+- ath_txq_schedule(sc, &sc->tx.txq[i]);
+- spin_unlock_bh(&sc->tx.txq[i].axq_lock);
+- }
+-
+ ath9k_ps_restore(sc);
+
+ return r;
+@@ -2094,7 +2093,7 @@ static void ath9k_wow_add_pattern(struct
{
struct ath_hw *ah = sc->sc_ah;
struct ath9k_wow_pattern *wow_pattern = NULL;