linux_dsm_epyc7002/drivers/net/wireless/ath/ath9k
Felix Fietkau 3a5e969bb2 ath9k: fix race condition in enabling/disabling IRQs
The code currently relies on refcounting to disable IRQs from within the
IRQ handler and re-enabling them again after the tasklet has run.

However, due to race conditions sometimes the IRQ handler might be
called twice, or the tasklet may not run at all (if interrupted in the
middle of a reset).

This can cause nasty imbalances in the irq-disable refcount which will
get the driver permanently stuck until the entire radio has been stopped
and started again (ath_reset will not recover from this).

Instead of using this fragile logic, change the code to ensure that
running the irq handler during tasklet processing is safe, and leave the
refcount untouched.

Cc: stable@vger.kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
2017-02-07 11:00:25 +02:00
..
ahb.c ath9k: constify ath_bus_ops structure 2016-12-01 13:17:45 +02:00
ani.c ath9k: clean up ANI per-channel pointer checking 2016-01-26 16:47:38 +02:00
ani.h
antenna.c
ar953x_initvals.h ath9k: Update QCA953x initvals 2016-03-11 13:59:56 +02:00
ar955x_1p0_initvals.h ath9k: Update AR955x initvals 2016-03-11 13:59:58 +02:00
ar956x_initvals.h ath9k: Update QCA956x initvals 2016-03-11 13:59:59 +02:00
ar5008_initvals.h
ar5008_phy.c ath9k: replace eeprom_param EEP_MINOR_REV with get_eeprom_rev 2016-12-15 10:26:27 +02:00
ar9001_initvals.h
ar9002_calib.c ath9k: ar9271_hw_pa_cal: use REG_READ_ARRAY 2015-03-30 11:31:30 +03:00
ar9002_hw.c ath9k: replace eeprom_param EEP_MINOR_REV with get_eeprom_rev 2016-12-15 10:26:27 +02:00
ar9002_initvals.h
ar9002_mac.c ath9k: ar9002_mac: kill off ACCESS_ONCE() 2017-01-12 12:59:45 +02:00
ar9002_phy.c ath9k_hw: fix spectral scan on AR9285 and newer 2016-07-19 20:58:07 +03:00
ar9002_phy.h ath9k_hw: fix spectral scan on AR9285 and newer 2016-07-19 20:58:07 +03:00
ar9003_2p2_initvals.h ath9k: Update AR9003 2.2 initvals 2016-03-11 13:59:56 +02:00
ar9003_aic.c ath9k: reduce stack usage in ar9003_aic_cal_post_process 2016-03-03 19:27:17 +02:00
ar9003_aic.h ath9k: reduce stack usage in ar9003_aic_cal_post_process 2016-03-03 19:27:17 +02:00
ar9003_buffalo_initvals.h
ar9003_calib.c Revert "ath9k_hw: implement temperature compensation support for AR9003+" 2016-10-13 14:11:30 +03:00
ar9003_eeprom.c ath9k: Add an eeprom_ops callback for retrieving the eepmisc value 2016-12-15 10:26:22 +02:00
ar9003_eeprom.h ath9k: indicate that the AR9003 EEPROM template values are little endian 2016-12-15 10:26:17 +02:00
ar9003_hw.c ath9k_hw: add low power tx gain table for AR953x 2016-01-26 16:47:38 +02:00
ar9003_mac.c ath9k: ar9003_mac: kill off ACCESS_ONCE() 2017-01-12 12:59:50 +02:00
ar9003_mac.h
ar9003_mci.c ath9k: make GPIO API to support both of WMAC and SOC 2016-03-11 14:00:02 +02:00
ar9003_mci.h ath9k: Fix GPM initialization 2015-03-03 14:55:24 +02:00
ar9003_paprd.c
ar9003_phy.c ath9k: Fix symbol overlap window for half/quarter channels 2016-05-09 21:12:01 +03:00
ar9003_phy.h ath9k_hw: fix duplicate (and partially wrong) definition of AR_CH0_THERM 2016-07-19 20:59:04 +03:00
ar9003_rtt.c ath9k: Fix RTT chainmask usage 2015-03-13 15:19:36 +02:00
ar9003_rtt.h
ar9003_wow.c ath9k: Restart TSF2 timers on wakeup 2015-02-26 14:58:46 +02:00
ar9330_1p1_initvals.h ath9k: Update AR933x initvals 2016-03-11 13:59:57 +02:00
ar9330_1p2_initvals.h ath9k: Update AR933x initvals 2016-03-11 13:59:57 +02:00
ar9340_initvals.h ath9k: Update AR9340 initvals 2016-03-11 13:59:57 +02:00
ar9462_2p0_initvals.h ath9k: Update AR9462 initvals 2016-03-11 13:59:57 +02:00
ar9462_2p1_initvals.h ath9k: Update AR9462 initvals 2016-03-11 13:59:57 +02:00
ar9485_initvals.h ath9k: Update AR9485 initvals 2016-03-11 13:59:58 +02:00
ar9565_1p0_initvals.h ath9k: Update AR9565 initvals 2016-03-11 13:59:58 +02:00
ar9565_1p1_initvals.h
ar9580_1p0_initvals.h ath9k: Update AR9580 initvals 2016-03-11 13:59:59 +02:00
ath9k.h ath9k: fix race condition in enabling/disabling IRQs 2017-02-07 11:00:25 +02:00
beacon.c ath9k: Fix beacon configuration for addition/removal of interfaces 2016-07-08 17:03:41 +03:00
btcoex.c ath9k: fix BTCoex configuration for SOC chips 2016-03-11 14:00:04 +02:00
btcoex.h ath9k: fix BTCoex configuration for SOC chips 2016-03-11 14:00:04 +02:00
calib.c cfg80211: remove enum ieee80211_band 2016-04-12 15:56:15 +02:00
calib.h
channel.c ath9k: Introduce airtime fairness scheduling between stations 2016-12-15 10:43:05 +02:00
common-beacon.c ath9k: remove ath9k_mod_tsf64_tu 2015-12-08 16:51:05 +02:00
common-beacon.h
common-debug.c ath9k: fix phyerror codes 2015-10-28 20:57:13 +02:00
common-debug.h ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
common-init.c cfg80211: remove enum ieee80211_band 2016-04-12 15:56:15 +02:00
common-init.h
common-spectral.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
common-spectral.h ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
common.c cfg80211: remove enum ieee80211_band 2016-04-12 15:56:15 +02:00
common.h ath9k: Fix beacon configuration for addition/removal of interfaces 2016-07-08 17:03:41 +03:00
debug_sta.c ath9k: Introduce airtime fairness scheduling between stations 2016-12-15 10:43:05 +02:00
debug.c ath9k: Introduce airtime fairness scheduling between stations 2016-12-15 10:43:05 +02:00
debug.h ath9k: Introduce airtime fairness scheduling between stations 2016-12-15 10:43:05 +02:00
dfs_debug.c
dfs_debug.h
dfs.c ath9k: DFS - add pulse chirp detection for FCC 2015-07-11 19:51:53 +03:00
dfs.h
dynack.c ath9k: Remove some #defined constants to decrease verbosity 2016-07-08 17:03:37 +03:00
dynack.h
eeprom_4k.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
eeprom_9287.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
eeprom_def.c ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
eeprom.c ath9k: define all EEPROM fields in Little Endian format 2016-12-15 10:26:42 +02:00
eeprom.h ath9k: define all EEPROM fields in Little Endian format 2016-12-15 10:26:42 +02:00
gpio.c ath9k: mark ath_fill_led_pin() static 2016-09-02 19:06:05 +03:00
hif_usb.c ath9k_htc: don't use HZ for usb msg timeouts 2016-12-01 13:18:33 +02:00
hif_usb.h ath9k_htc: don't use HZ for usb msg timeouts 2016-12-01 13:18:33 +02:00
htc_drv_beacon.c ath9k: Remove some #defined constants to decrease verbosity 2016-07-08 17:03:37 +03:00
htc_drv_debug.c wireless: use %*pb[l] to print bitmaps including cpumasks and nodemasks 2015-02-13 21:21:38 -08:00
htc_drv_gpio.c ath9k: free GPIO resource for SOC GPIOs 2016-03-11 14:00:02 +02:00
htc_drv_init.c ath9k: Remove some #defined constants to decrease verbosity 2016-07-08 17:03:37 +03:00
htc_drv_main.c Merge ath-next from ath.git 2016-04-26 14:13:59 +03:00
htc_drv_txrx.c cfg80211: remove enum ieee80211_band 2016-04-12 15:56:15 +02:00
htc_hst.c ath9k_htc: fix minor mistakes in dev_err messages 2016-11-15 16:57:47 +02:00
htc_hst.h
htc.h ath9k_htc: add support of channel switch 2015-06-15 12:44:34 +03:00
hw-ops.h ath9k: Register private AIC ops 2015-03-20 08:27:17 +02:00
hw.c ath9k_hw: check if the chip failed to wake up 2017-02-07 11:00:21 +02:00
hw.h Revert "ath9k_hw: implement temperature compensation support for AR9003+" 2016-10-13 14:11:30 +03:00
init.c ath9k: fix race condition in enabling/disabling IRQs 2017-02-07 11:00:25 +02:00
Kconfig ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
link.c ath9k: rename tx_complete_work to hw_check_work 2017-02-07 11:00:17 +02:00
mac.c ath9k: fix race condition in enabling/disabling IRQs 2017-02-07 11:00:25 +02:00
mac.h ath9k: fix race condition in enabling/disabling IRQs 2017-02-07 11:00:25 +02:00
main.c ath9k: fix race condition in enabling/disabling IRQs 2017-02-07 11:00:25 +02:00
Makefile ath9k: move RELAY and DEBUG_FS to ATH9K[_HTC]_DEBUGFS 2017-01-13 15:29:24 +02:00
mci.c ath9k: Fix GPM initialization 2015-03-03 14:55:24 +02:00
mci.h
pci.c ath9k: Really fix LED polarity for some Mini PCI AR9220 MB92 cards. 2016-11-15 16:52:16 +02:00
phy.h
recv.c ath9k: Introduce airtime fairness scheduling between stations 2016-12-15 10:43:05 +02:00
reg_aic.h ath9k: Add register definitions for AIC 2015-03-20 08:27:19 +02:00
reg_mci.h ath9k: Mute BT properly 2015-03-03 14:55:27 +02:00
reg_wow.h ath9k: Clear additional WoW events 2015-02-26 14:58:43 +02:00
reg.h ath9k: fix GPIO mask for AR9462 and AR9565 2016-06-14 16:21:31 +03:00
rng.c ath9k: change entropy formula for easier understanding 2016-10-13 17:22:44 +03:00
tx99.c ath9k: Proper TX99 interrupt ref count 2016-05-28 11:24:25 +03:00
wmi.c ath9k_htc: wmi: match wait_for_completion_timeout return type 2015-08-13 15:26:19 +03:00
wmi.h ath9k_htc: check seq number instead of cmd id for timeout 2015-04-07 20:07:44 +03:00
wow.c ath9k: Register correct WOW details with mac80211 2015-02-06 08:39:21 +02:00
xmit.c ath9k: rename tx_complete_work to hw_check_work 2017-02-07 11:00:17 +02:00