From eb06ee48465370e5e0723d265da173e721216203 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 5 Oct 2013 12:12:57 +0000 Subject: ath9k: fix tx queueing issues after background scans Signed-off-by: Felix Fietkau Backport of r38304 git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@38305 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/mac80211/patches/300-pending_work.patch | 49 ++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) (limited to 'package/mac80211/patches/300-pending_work.patch') 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; -- cgit v1.2.3