diff options
author | Felix Fietkau <nbd@nbd.name> | 2017-01-25 15:32:18 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2017-01-25 16:25:48 +0100 |
commit | b94177e10fc72f9309eae7459c3570e5c080e960 (patch) | |
tree | 26efa9c6172b394c2113926cfa7b6aad6c9ebc1f /package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch | |
parent | 4cacc1c5f5e01594d4e9148a7b34946845424e24 (diff) | |
download | mtk-20170518-b94177e10fc72f9309eae7459c3570e5c080e960.zip mtk-20170518-b94177e10fc72f9309eae7459c3570e5c080e960.tar.gz mtk-20170518-b94177e10fc72f9309eae7459c3570e5c080e960.tar.bz2 |
ath9k: add stability fixes for long standing hang issues (FS#13, #34, #373, #383)
The radio would stop communicating completely. This issue was easiest to
trigger on AR913x devices, e.g. the TP-Link TL-WR1043ND, but other
hardware was occasionally affected as well.
The most critical issue was a race condition in disabling/enabling IRQs
between the IRQ handler and the IRQ processing tasklet
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch')
-rw-r--r-- | package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch b/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch index 08acc0e..ea73e6a 100644 --- a/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch +++ b/package/kernel/mac80211/patches/542-ath9k_debugfs_diag.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1463,6 +1463,50 @@ static const struct file_operations fops +@@ -1464,6 +1464,50 @@ static const struct file_operations fops #endif @@ -51,7 +51,7 @@ int ath9k_init_debug(struct ath_hw *ah) { struct ath_common *common = ath9k_hw_common(ah); -@@ -1490,6 +1534,8 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -1491,6 +1535,8 @@ int ath9k_init_debug(struct ath_hw *ah) debugfs_create_file("gpio_led", S_IWUSR, sc->debug.debugfs_phy, sc, &fops_gpio_led); #endif @@ -94,7 +94,7 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1838,6 +1838,20 @@ u32 ath9k_hw_get_tsf_offset(struct times +@@ -1842,6 +1842,20 @@ u32 ath9k_hw_get_tsf_offset(struct times } EXPORT_SYMBOL(ath9k_hw_get_tsf_offset); @@ -115,7 +115,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, struct ath9k_hw_cal_data *caldata, bool fastcc) { -@@ -2046,6 +2060,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -2050,6 +2064,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st ar9003_hw_disable_phy_restart(ah); ath9k_hw_apply_gpio_override(ah); @@ -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 -@@ -533,6 +533,11 @@ irqreturn_t ath_isr(int irq, void *dev) +@@ -541,6 +541,11 @@ irqreturn_t ath_isr(int irq, void *dev) if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) return IRQ_HANDLED; |