linux_dsm_epyc7002/drivers/net/wireless/ath/ath5k
Sergey Ryazanov ab5e290a86 ath5k: fix reset race
To prepare for reset ath5k should finish all asynchronous tasks. At
first, it disables the interrupt generation, then it waits for the
interrupt handler and tasklets completion, and then proceeds to the HW
configuration update. But it does not consider that the interrupt
handler or tasklet re-enables the interrupt generation. And we fall in a
situation when ath5k assumes that interrupts are disabled, but it is
not.

This can lead to different consequences, such as reception of the frame,
when we do not expect it. Under certain circumstances, this can lead to
the following warning:

  WARNING: at ath5k/base.c:589 ath5k_tasklet_rx+0x318/0x6ec [ath5k]()
  invalid hw_rix: 1a
  [..]
  Call Trace:
  [<802656a8>] show_stack+0x48/0x70
  [<802dd92c>] warn_slowpath_common+0x88/0xbc
  [<802dd98c>] warn_slowpath_fmt+0x2c/0x38
  [<81b51be8>] ath5k_tasklet_rx+0x318/0x6ec [ath5k]
  [<8028ac64>] tasklet_action+0x8c/0xf0
  [<80075804>] __do_softirq+0x180/0x32c
  [<80196ce8>] irq_exit+0x54/0x70
  [<80041848>] ret_from_irq+0x0/0x4
  [<80182fdc>] ioread32+0x4/0xc
  [<81b4c42c>] ath5k_hw_set_sleep_clock+0x2ec/0x474 [ath5k]
  [<81b4cf28>] ath5k_hw_reset+0x50/0xeb8 [ath5k]
  [<81b50900>] ath5k_reset+0xd4/0x310 [ath5k]
  [<81b557e8>] ath5k_config+0x4c/0x104 [ath5k]
  [<80d01770>] ieee80211_hw_config+0x2f4/0x35c [mac80211]
  [<80d09aa8>] ieee80211_scan_work+0x2e4/0x414 [mac80211]
  [<8022c3f4>] process_one_work+0x28c/0x400
  [<802df8f8>] worker_thread+0x258/0x3c0
  [<801b5710>] kthread+0xe0/0xec
  [<800418a8>] ret_from_kernel_thread+0x14/0x1c

Fix this issue by adding a new status flag, which forbids to re-enable
the interrupt generation until the HW configuration is completed.

Note: previous patch, which reorders the Rx disable code helps to avoid
the above warning, but not fixes the root cause of unexpected frame
receiving.

CC: Jiri Slaby <jirislaby@gmail.com>
CC: Nick Kossifidis <mickflemm@gmail.com>
CC: Luis R. Rodriguez <mcgrof@do-not-panic.com>
Reported-by: Christophe Prevotaux <cprevotaux@nltinc.com>
Tested-by: Christophe Prevotaux <cprevotaux@nltinc.com>
Tested-by: Eric Bree <ebree@nltinc.com>
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2015-03-13 15:11:53 +02:00
..
ahb.c ath5k: drop owner assignment from platform_drivers 2015-01-06 20:40:27 +02:00
ani.c
ani.h
ath5k.h ath5k: fix reset race 2015-03-13 15:11:53 +02:00
attach.c ath5k: remove redundant null check before kfree() 2014-08-28 14:41:57 -04:00
base.c ath5k: fix reset race 2015-03-13 15:11:53 +02:00
base.h ath5k: enable support for 5 MHz and 10 MHz channels 2013-08-16 14:17:50 -04:00
caps.c
debug.c Merge tag 'master-2014-10-02' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next 2014-10-05 21:34:39 -04:00
debug.h
desc.c
desc.h
dma.c ath5k: Reset Tx interrupt bits also on PISR 2013-12-11 10:56:22 -05:00
eeprom.c
eeprom.h
gpio.c
initvals.c
Kconfig ath5k: update dependencies 2014-11-24 07:45:29 +01:00
led.c ath5k: update dependencies 2014-11-24 07:45:29 +01:00
mac80211-ops.c cfg80211: remove "channel" from survey names 2015-01-08 15:27:52 +01:00
Makefile ath5k: revert AHB bus support removing 2014-11-24 07:45:28 +01:00
pci.c PCI: Remove DEFINE_PCI_DEVICE_TABLE macro use 2014-08-12 12:15:14 -06:00
pcu.c ath5k: document a fall-through case in ath5k_hw_set_opmode 2015-01-23 21:17:26 +02:00
phy.c ath5k: Fix AR5K_PHY_TXPOWER_RATE_MAX register value setting. 2014-04-30 12:13:07 -04:00
qcu.c ath5k: fix hardware queue index assignment 2014-12-01 15:57:22 -05:00
reg.h
reset.c ath5k: channel change fix 2015-03-13 15:11:45 +02:00
rfbuffer.h
rfgain.h
rfkill.c
sysfs.c
trace.h ath5k: use more idiomatic tracing include style 2013-04-12 15:29:14 -04:00