diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-01-14 15:58:46 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-01-14 15:58:46 +0000 |
commit | 71abb04e4be002cc44cf2fe7b5eeccbfbd595359 (patch) | |
tree | 01daaf10b63fac3ca012264d44137009a186cefb /package/mac80211/patches/300-pending_work.patch | |
parent | 46e56ff4d043e17d1e6f6cea971929e5fe1cc8b4 (diff) | |
download | upstream-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.patch | 34 |
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); } |