aboutsummaryrefslogtreecommitdiffstats
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
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
-rw-r--r--package/mac80211/patches/300-pending_work.patch49
-rw-r--r--package/mac80211/patches/512-ath9k_channelbw_debugfs.patch6
-rw-r--r--package/mac80211/patches/521-ath9k_cur_txpower.patch4
-rw-r--r--package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch2
-rw-r--r--package/mac80211/patches/553-ath9k_debugfs_diag.patch2
-rw-r--r--package/mac80211/patches/560-ath9k_tx_queueing_rework.patch2
6 files changed, 56 insertions, 9 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;
diff --git a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
index d6d1ae2e63..a42daf5c3e 100644
--- a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
+++ b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
@@ -80,7 +80,7 @@
debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1139,7 +1139,7 @@ int ath9k_spectral_scan_config(struct ie
+@@ -1138,7 +1138,7 @@ int ath9k_spectral_scan_config(struct ie
return 0;
}
@@ -89,7 +89,7 @@
{
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
-@@ -1195,9 +1195,11 @@ static int ath9k_config(struct ieee80211
+@@ -1194,9 +1194,11 @@ static int ath9k_config(struct ieee80211
struct ieee80211_channel *curchan = hw->conf.chandef.chan;
enum nl80211_channel_type channel_type =
cfg80211_get_chandef_type(&conf->chandef);
@@ -101,7 +101,7 @@
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
-@@ -1233,7 +1235,23 @@ static int ath9k_config(struct ieee80211
+@@ -1232,7 +1234,23 @@ static int ath9k_config(struct ieee80211
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
}
diff --git a/package/mac80211/patches/521-ath9k_cur_txpower.patch b/package/mac80211/patches/521-ath9k_cur_txpower.patch
index 87a316c4f0..a14d0315f8 100644
--- a/package/mac80211/patches/521-ath9k_cur_txpower.patch
+++ b/package/mac80211/patches/521-ath9k_cur_txpower.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1258,6 +1258,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1257,6 +1257,8 @@ int ath9k_config(struct ieee80211_hw *hw
return -EINVAL;
}
@@ -9,7 +9,7 @@
/*
* The most recent snapshot of channel->noisefloor for the old
* channel is only available after the hardware reset. Copy it to
-@@ -1294,6 +1296,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1293,6 +1295,7 @@ int ath9k_config(struct ieee80211_hw *hw
sc->config.txpowlimit = 2 * conf->power_level;
ath9k_cmn_update_txpow(ah, sc->curtxpow,
sc->config.txpowlimit, &sc->curtxpow);
diff --git a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
index 8f48eea3ad..9d627ac1e1 100644
--- a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
+++ b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
@@ -21,7 +21,7 @@
if (ant_gain > max_gain)
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1292,7 +1292,10 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1291,7 +1291,10 @@ int ath9k_config(struct ieee80211_hw *hw
}
if (changed & IEEE80211_CONF_CHANGE_POWER) {
diff --git a/package/mac80211/patches/553-ath9k_debugfs_diag.patch b/package/mac80211/patches/553-ath9k_debugfs_diag.patch
index 7cf1c2a3fd..7230d32963 100644
--- a/package/mac80211/patches/553-ath9k_debugfs_diag.patch
+++ b/package/mac80211/patches/553-ath9k_debugfs_diag.patch
@@ -125,7 +125,7 @@
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -462,6 +462,11 @@ irqreturn_t ath_isr(int irq, void *dev)
+@@ -472,6 +472,11 @@ irqreturn_t ath_isr(int irq, void *dev)
ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */
status &= ah->imask; /* discard unasked-for bits */
diff --git a/package/mac80211/patches/560-ath9k_tx_queueing_rework.patch b/package/mac80211/patches/560-ath9k_tx_queueing_rework.patch
index 6fb0940a82..47ecd747ba 100644
--- a/package/mac80211/patches/560-ath9k_tx_queueing_rework.patch
+++ b/package/mac80211/patches/560-ath9k_tx_queueing_rework.patch
@@ -90,7 +90,7 @@
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1403,9 +1403,6 @@ static void ath9k_sta_notify(struct ieee
+@@ -1402,9 +1402,6 @@ static void ath9k_sta_notify(struct ieee
struct ath_softc *sc = hw->priv;
struct ath_node *an = (struct ath_node *) sta->drv_priv;