ath9k: revert a faulty rx path fix
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@40802 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
c71d98a919
commit
007acb0c56
|
@ -1,13 +1,3 @@
|
||||||
commit 230ab8c1880266c9cfceac962e2d48309dea79a7
|
|
||||||
Author: Felix Fietkau <nbd@openwrt.org>
|
|
||||||
Date: Mon May 19 21:48:56 2014 +0200
|
|
||||||
|
|
||||||
ath9k: re-schedule rx processing after budget exceeded
|
|
||||||
|
|
||||||
Should improve rx stability under load
|
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|
||||||
|
|
||||||
commit ff9655bebd25d35ab13c2515a029723b69949720
|
commit ff9655bebd25d35ab13c2515a029723b69949720
|
||||||
Author: Felix Fietkau <nbd@openwrt.org>
|
Author: Felix Fietkau <nbd@openwrt.org>
|
||||||
Date: Mon May 19 21:20:49 2014 +0200
|
Date: Mon May 19 21:20:49 2014 +0200
|
||||||
|
@ -4328,52 +4318,6 @@ Date: Tue Apr 29 17:52:36 2014 +0200
|
||||||
/* Finally check that all iftypes that we're currently
|
/* Finally check that all iftypes that we're currently
|
||||||
* using are actually part of this combination. If they
|
* using are actually part of this combination. If they
|
||||||
* aren't then we can't use this combination and have
|
* aren't then we can't use this combination and have
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
@@ -444,6 +444,8 @@ void ath9k_tasklet(unsigned long data)
|
|
||||||
ath9k_ps_wakeup(sc);
|
|
||||||
spin_lock(&sc->sc_pcu_lock);
|
|
||||||
|
|
||||||
+ sc->intrstatus = 0;
|
|
||||||
+
|
|
||||||
if (status & ATH9K_INT_FATAL) {
|
|
||||||
type = RESET_TYPE_FATAL_INT;
|
|
||||||
ath9k_queue_reset(sc, type);
|
|
||||||
@@ -512,10 +514,12 @@ void ath9k_tasklet(unsigned long data)
|
|
||||||
if (status & rxmask) {
|
|
||||||
/* Check for high priority Rx first */
|
|
||||||
if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
|
|
||||||
- (status & ATH9K_INT_RXHP))
|
|
||||||
- ath_rx_tasklet(sc, 0, true);
|
|
||||||
+ (status & ATH9K_INT_RXHP) &&
|
|
||||||
+ ath_rx_tasklet(sc, 0, true))
|
|
||||||
+ sc->intrstatus |= ATH9K_INT_RXHP;
|
|
||||||
|
|
||||||
- ath_rx_tasklet(sc, 0, false);
|
|
||||||
+ if (ath_rx_tasklet(sc, 0, false))
|
|
||||||
+ sc->intrstatus |= ATH9K_INT_RXLP;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status & ATH9K_INT_TX) {
|
|
||||||
@@ -543,6 +547,9 @@ void ath9k_tasklet(unsigned long data)
|
|
||||||
|
|
||||||
/* re-enable hardware interrupt */
|
|
||||||
ath9k_hw_enable_interrupts(ah);
|
|
||||||
+ if (sc->intrstatus)
|
|
||||||
+ tasklet_schedule(&sc->intr_tq);
|
|
||||||
+
|
|
||||||
out:
|
|
||||||
spin_unlock(&sc->sc_pcu_lock);
|
|
||||||
ath9k_ps_restore(sc);
|
|
||||||
@@ -609,7 +616,7 @@ irqreturn_t ath_isr(int irq, void *dev)
|
|
||||||
return IRQ_NONE;
|
|
||||||
|
|
||||||
/* Cache the status */
|
|
||||||
- sc->intrstatus = status;
|
|
||||||
+ sc->intrstatus |= status;
|
|
||||||
|
|
||||||
if (status & SCHED_INTR)
|
|
||||||
sched = true;
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||||
@@ -34,7 +34,8 @@ static inline bool ath9k_check_auto_slee
|
@@ -34,7 +34,8 @@ static inline bool ath9k_check_auto_slee
|
||||||
|
@ -4437,10 +4381,3 @@ Date: Tue Apr 29 17:52:36 2014 +0200
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!budget--)
|
if (!budget--)
|
||||||
@@ -1135,5 +1137,5 @@ requeue:
|
|
||||||
ath9k_hw_set_interrupts(ah);
|
|
||||||
}
|
|
||||||
|
|
||||||
- return 0;
|
|
||||||
+ return !budget;
|
|
||||||
}
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
out:
|
out:
|
||||||
spin_unlock_bh(&sc->sc_pcu_lock);
|
spin_unlock_bh(&sc->sc_pcu_lock);
|
||||||
@@ -1411,6 +1415,7 @@ static int ath9k_config(struct ieee80211
|
@@ -1404,6 +1408,7 @@ static int ath9k_config(struct ieee80211
|
||||||
sc->config.txpowlimit = 2 * conf->power_level;
|
sc->config.txpowlimit = 2 * conf->power_level;
|
||||||
ath9k_cmn_update_txpow(ah, sc->curtxpow,
|
ath9k_cmn_update_txpow(ah, sc->curtxpow,
|
||||||
sc->config.txpowlimit, &sc->curtxpow);
|
sc->config.txpowlimit, &sc->curtxpow);
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
if (ant_gain > max_gain)
|
if (ant_gain > max_gain)
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -1411,7 +1411,10 @@ static int ath9k_config(struct ieee80211
|
@@ -1404,7 +1404,10 @@ static int ath9k_config(struct ieee80211
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed & IEEE80211_CONF_CHANGE_POWER) {
|
if (changed & IEEE80211_CONF_CHANGE_POWER) {
|
||||||
|
|
|
@ -125,7 +125,7 @@
|
||||||
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -612,6 +612,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
@@ -605,6 +605,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||||
ath9k_debug_sync_cause(sc, sync_cause);
|
ath9k_debug_sync_cause(sc, sync_cause);
|
||||||
status &= ah->imask; /* discard unasked-for bits */
|
status &= ah->imask; /* discard unasked-for bits */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue