aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/300-pending_work.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-01-14 15:58:46 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-01-14 15:58:46 +0000
commit71abb04e4be002cc44cf2fe7b5eeccbfbd595359 (patch)
tree01daaf10b63fac3ca012264d44137009a186cefb /package/mac80211/patches/300-pending_work.patch
parent46e56ff4d043e17d1e6f6cea971929e5fe1cc8b4 (diff)
downloadupstream-71abb04e4be002cc44cf2fe7b5eeccbfbd595359.tar.gz
upstream-71abb04e4be002cc44cf2fe7b5eeccbfbd595359.tar.bz2
upstream-71abb04e4be002cc44cf2fe7b5eeccbfbd595359.zip
ath9k: fix a soft lockup on smp systems
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35152 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r--package/mac80211/patches/300-pending_work.patch34
1 files changed, 20 insertions, 14 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index f7b2540272..06041b36f9 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -318,15 +318,7 @@
{
struct ath_hw *ah = sc->sc_ah;
bool ret = true;
-@@ -196,19 +196,15 @@ static bool ath_prepare_reset(struct ath
- ath9k_debug_samp_bb_mac(sc);
- ath9k_hw_disable_interrupts(ah);
-
-+ tasklet_disable(&sc->intr_tq);
-+
- if (!ath_stoprecv(sc))
- ret = false;
-
+@@ -202,14 +202,6 @@ static bool ath_prepare_reset(struct ath
if (!ath_drain_all_txq(sc, retry_tx))
ret = false;
@@ -337,11 +329,11 @@
- } else {
- ath_flushrecv(sc);
- }
-+ tasklet_enable(&sc->intr_tq);
-
+-
return ret;
}
-@@ -262,7 +258,6 @@ static int ath_reset_internal(struct ath
+
+@@ -262,11 +254,11 @@ static int ath_reset_internal(struct ath
struct ath_common *common = ath9k_hw_common(ah);
struct ath9k_hw_cal_data *caldata = NULL;
bool fastcc = true;
@@ -349,7 +341,12 @@
int r;
__ath_cancel_work(sc);
-@@ -276,11 +271,10 @@ static int ath_reset_internal(struct ath
+
++ tasklet_disable(&sc->intr_tq);
+ spin_lock_bh(&sc->sc_pcu_lock);
+
+ if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) {
+@@ -276,11 +268,10 @@ static int ath_reset_internal(struct ath
if (!hchan) {
fastcc = false;
@@ -362,7 +359,16 @@
fastcc = false;
ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
-@@ -804,7 +798,7 @@ static void ath9k_stop(struct ieee80211_
+@@ -302,6 +293,8 @@ static int ath_reset_internal(struct ath
+
+ out:
+ spin_unlock_bh(&sc->sc_pcu_lock);
++ tasklet_enable(&sc->intr_tq);
++
+ return r;
+ }
+
+@@ -804,7 +797,7 @@ static void ath9k_stop(struct ieee80211_
ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
}