projects
/
openwrt
/
staging
/
dedeckeh.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
fca519e
)
ath9k: fix a soft lockup on smp systems
author
Felix Fietkau
<nbd@openwrt.org>
Mon, 14 Jan 2013 15:58:46 +0000
(15:58 +0000)
committer
Felix Fietkau
<nbd@openwrt.org>
Mon, 14 Jan 2013 15:58:46 +0000
(15:58 +0000)
SVN-Revision: 35152
package/mac80211/patches/300-pending_work.patch
patch
|
blob
|
history
package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
patch
|
blob
|
history
package/mac80211/patches/521-ath9k_cur_txpower.patch
patch
|
blob
|
history
package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch
patch
|
blob
|
history
package/mac80211/patches/553-ath9k_debugfs_diag.patch
patch
|
blob
|
history
diff --git
a/package/mac80211/patches/300-pending_work.patch
b/package/mac80211/patches/300-pending_work.patch
index f7b25402724cfa0b7b6b8c4b089d3ed04ff23eee..06041b36f9dad8837500e92a27af645e4ee3d081 100644
(file)
--- 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;
{
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;
if (!ath_drain_all_txq(sc, retry_tx))
ret = false;
@@
-337,11
+329,11
@@
- } else {
- ath_flushrecv(sc);
- }
- } else {
- ath_flushrecv(sc);
- }
-+ tasklet_enable(&sc->intr_tq);
-
+-
return ret;
}
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;
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);
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;
if (!hchan) {
fastcc = false;
@@
-362,7
+359,16
@@
fastcc = false;
ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
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);
}
ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
}
diff --git
a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
index 4d20502d131aa89585e56a62798f1d5c64638d45..8c459180af24a0839e225a9ce2ac073e5ad4eb31 100644
(file)
--- 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
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
-@@ -106
9,7 +1069
,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -106
8,7 +1068
,7 @@ static void ath9k_disable_ps(struct ath_
ath_dbg(common, PS, "PowerSave disabled\n");
}
ath_dbg(common, PS, "PowerSave disabled\n");
}
@@
-89,7
+89,7
@@
{
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
{
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
-@@ -112
3,9 +1123
,11 @@ static int ath9k_config(struct ieee80211
+@@ -112
2,9 +1122
,11 @@ static int ath9k_config(struct ieee80211
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
struct ieee80211_channel *curchan = hw->conf.channel;
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
struct ieee80211_channel *curchan = hw->conf.channel;
@@
-101,7
+101,7
@@
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
-@@ -116
8,7 +1170
,23 @@ static int ath9k_config(struct ieee80211
+@@ -116
7,7 +1169
,23 @@ static int ath9k_config(struct ieee80211
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
}
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 294e3dd99d582f67b7ea5016209756041b1d4a99..ad2d3d91842d34c26b0ac16c45df69d834f26d0c 100644
(file)
--- 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
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -119
3,6 +1193
,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -119
2,6 +1192
,8 @@ int ath9k_config(struct ieee80211_hw *hw
return -EINVAL;
}
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
/*
* The most recent snapshot of channel->noisefloor for the old
* channel is only available after the hardware reset. Copy it to
-@@ -120
7,6 +1209
,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -120
6,6 +1208
,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);
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 e32f66ea4deea94a2436a76e0bd7e39fdbac093c..0c3842577dce89ff0e9ee4fb80e8d05fe0daf449 100644
(file)
--- 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
if (ant_gain > max_gain)
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -120
5,7 +1205
,10 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -120
4,7 +1204
,10 @@ int ath9k_config(struct ieee80211_hw *hw
}
if (changed & IEEE80211_CONF_CHANGE_POWER) {
}
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 9ea2ec9ba2118891fabbe45fd78e82b6af08c4fb..078a7f878ba91ab1ab3388d5718449cf28277ead 100644
(file)
--- 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
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
-@@ -46
4,6 +464
,11 @@ irqreturn_t ath_isr(int irq, void *dev)
+@@ -46
3,6 +463
,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 */
ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */
status &= ah->imask; /* discard unasked-for bits */