2014-04-09 06:11:19 +08:00
|
|
|
commit ec998e5991781ecdaad0911dc64f1c8d3749c308
|
|
|
|
Author: Felix Fietkau <nbd@openwrt.org>
|
|
|
|
Date: Tue Apr 8 23:42:17 2014 +0200
|
|
|
|
|
|
|
|
ath9k: fix a scheduling while atomic bug in CSA handling
|
|
|
|
|
|
|
|
Commit "ath9k: prepare for multi-interface CSA support" added a call to
|
|
|
|
ieee80211_iterate_active_interfaces in atomic context (beacon tasklet),
|
|
|
|
which is crashing.
|
|
|
|
Use ieee80211_iterate_active_interfaces_atomic instead.
|
|
|
|
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|
|
|
|
2014-04-09 06:11:13 +08:00
|
|
|
commit 93f310a38a1d81a4bc8fcd9bf29628bd721cf2ef
|
|
|
|
Author: Felix Fietkau <nbd@openwrt.org>
|
|
|
|
Date: Sun Apr 6 23:35:28 2014 +0200
|
|
|
|
|
|
|
|
ath9k_hw: reduce ANI firstep range for older chips
|
|
|
|
|
|
|
|
Use 0-8 instead of 0-16, which is closer to the old implementation.
|
|
|
|
Also drop the overwrite of the firstep_low parameter to improve
|
|
|
|
stability.
|
|
|
|
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|
|
|
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
|
|
|
|
@@ -1004,11 +1004,9 @@ static bool ar5008_hw_ani_control_new(st
|
|
|
|
case ATH9K_ANI_FIRSTEP_LEVEL:{
|
|
|
|
u32 level = param;
|
|
|
|
|
|
|
|
- value = level * 2;
|
|
|
|
+ value = level;
|
|
|
|
REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
|
|
|
|
AR_PHY_FIND_SIG_FIRSTEP, value);
|
|
|
|
- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
|
|
|
|
- AR_PHY_FIND_SIG_FIRSTEP_LOW, value);
|
|
|
|
|
|
|
|
if (level != aniState->firstepLevel) {
|
|
|
|
ath_dbg(common, ANI,
|
2014-04-09 06:11:19 +08:00
|
|
|
--- a/drivers/net/wireless/ath/ath9k/beacon.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
|
|
|
|
@@ -312,10 +312,9 @@ static void ath9k_csa_update_vif(void *d
|
|
|
|
|
|
|
|
void ath9k_csa_update(struct ath_softc *sc)
|
|
|
|
{
|
|
|
|
- ieee80211_iterate_active_interfaces(sc->hw,
|
|
|
|
- IEEE80211_IFACE_ITER_NORMAL,
|
|
|
|
- ath9k_csa_update_vif,
|
|
|
|
- sc);
|
|
|
|
+ ieee80211_iterate_active_interfaces_atomic(sc->hw,
|
|
|
|
+ IEEE80211_IFACE_ITER_NORMAL,
|
|
|
|
+ ath9k_csa_update_vif, sc);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ath9k_beacon_tasklet(unsigned long data)
|