linux/drivers/net/wireless
Rakesh Pillai b92aba35d3 ath10k: Add interrupt summary based CE processing
Currently the NAPI processing loops through all
the copy engines and processes a particular copy
engine is the copy completion is set for that copy
engine. The host driver is not supposed to access
any copy engine register after clearing the interrupt
status register.

This might result in kernel crash like the one below
[ 1159.220143] Call trace:
[ 1159.220170]  ath10k_snoc_read32+0x20/0x40 [ath10k_snoc]
[ 1159.220193]  ath10k_ce_per_engine_service_any+0x78/0x130 [ath10k_core]
[ 1159.220203]  ath10k_snoc_napi_poll+0x38/0x8c [ath10k_snoc]
[ 1159.220270]  net_rx_action+0x100/0x3b0
[ 1159.220312]  __do_softirq+0x164/0x30c
[ 1159.220345]  run_ksoftirqd+0x2c/0x64
[ 1159.220380]  smpboot_thread_fn+0x1b0/0x288
[ 1159.220405]  kthread+0x11c/0x12c
[ 1159.220423]  ret_from_fork+0x10/0x18

To avoid such a scenario, we generate an interrupt
summary by reading the copy completion for all the
copy engine before actually processing any of them.
This will avoid reading the interrupt status register
for any CE after the interrupt status is cleared.

Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1

Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Tested-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1593193967-29897-1-git-send-email-pillair@codeaurora.org
2020-09-01 14:59:33 +03:00
..
admtek adm8211: switch from 'pci_' to 'dma_' API 2020-08-18 15:51:41 +03:00
ath ath10k: Add interrupt summary based CE processing 2020-09-01 14:59:33 +03:00
atmel atmel: fix wiki website url 2020-07-15 13:18:40 +03:00
broadcom brcmfmac: check ndev pointer 2020-08-18 15:49:28 +03:00
cisco airo: use generic power management 2020-08-02 18:24:37 +03:00
intel Merge branch 'akpm' (patches from Andrew) 2020-08-07 11:39:33 -07:00
intersil mm, treewide: rename kzfree() to kfree_sensitive() 2020-08-07 11:33:22 -07:00
marvell mwifiex: Do not use GFP_KERNEL in atomic context 2020-08-18 15:52:11 +03:00
mediatek Merge git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git 2020-08-04 14:02:54 +03:00
microchip wilc1000: Move wilc1000 SDIO ID's from driver source to common header file 2020-08-02 18:12:23 +03:00
quantenna qtnfmac: Missing platform_device_unregister() on error in qtnf_core_mac_alloc() 2020-08-02 18:20:30 +03:00
ralink rt2x00: pci: use generic power management 2020-08-02 18:13:45 +03:00
realtek rtw88: fix spelling mistake: "unsupport" -> "unsupported" 2020-08-18 15:51:08 +03:00
rsi mmc: sdio: Move SDIO IDs from rsi_sdio driver to common include file 2020-07-13 12:18:24 +02:00
st treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
ti wl1251, wlcore: fix spelling mistake "buld" -> "build" 2020-08-18 15:50:31 +03:00
zydas zd1211rw: remove needless check before usb_free_coherent() 2020-07-15 19:46:38 +03:00
Kconfig wireless-drivers-next patches for v5.9 2020-07-20 17:52:50 -07:00
mac80211_hwsim.c mac80211: Use fallthrough pseudo-keyword 2020-07-31 09:24:23 +02:00
mac80211_hwsim.h mac80211_hwsim: notify wmediumd of used MAC addresses 2020-04-24 11:45:47 +02:00
Makefile wilc1000: move wilc driver out of staging 2020-06-26 08:46:46 +03:00
ray_cs.c ray_cs: use true,false for bool variable 2020-05-06 11:33:23 +03:00
ray_cs.h
rayctl.h ray_cs: Replace zero-length array with flexible-array member 2020-03-23 19:18:27 +02:00
rndis_wlan.c rndis_wlan: tighten check of rndis_query_oid return 2020-08-18 15:52:45 +03:00
virt_wifi.c virt_wifi: implement ndo_get_iflink 2020-03-20 14:42:20 +01:00
wl3501_cs.c netdev: pass the stuck queue to the timeout handler 2019-12-12 21:38:57 -08:00
wl3501.h wl3501_cs: Replace zero-length array with flexible-array member 2020-03-23 19:21:21 +02:00