brcmfmac: Handling IRQ in ISR directly for non-OOB
authorWei Ni <wni@nvidia.com>
Wed, 26 Sep 2012 07:58:18 +0000 (15:58 +0800)
committerSimone Willett <swillett@nvidia.com>
Fri, 19 Oct 2012 19:18:33 +0000 (12:18 -0700)
commit49d3d239f59683062bd78d2a4de67634a92069da
tree4ca0b709e74ac7e8a4e945e6fa69f8528a36980b
parent6b09e0cfc48ebb10b54da2692548c83e134baa03
brcmfmac: Handling IRQ in ISR directly for non-OOB

In case of inband interrupts, if we handle the interrupt in dpc thread,
two level of thread switching takes place to process wifi interrupts.
One in SDHCI driver and the other in Wifi driver. This may cause the system
instability.
Because the SDHCI calls sdio_irq_thread() to handle the irq, this thread locks
mmc host and calls wifi handler. It expects WiFi handler to be quick and
enables sdio interrupt from card at end. If wifi handler defers this work for
a different thread, sdio_irq_thread() will be stuck on next wifi interrupt
since mmc lock is not freed.

Handling the interrupt in ISR directly will prevent thread context switching
in wifi driver. It can fix the instability problems.

Change-Id: I1d0208f09d16d01a154d446f52f24356ebf7cddc
Signed-off-by: Wei Ni <wni@nvidia.com>
Reviewed-on: http://git-master/r/142591
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c