]> git.openpandora.org Git - pandora-kernel.git/commitdiff
cw1200: Don't perform SPI transfers in interrupt context
authorSolomon Peachy <pizza@shaftnet.org>
Wed, 28 Aug 2013 00:29:46 +0000 (20:29 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 9 Sep 2013 18:40:53 +0000 (14:40 -0400)
When we get an interrupt from the hardware, the first thing the driver does
is tell the device to mask off the interrupt line.  Unfortunately this
involves a SPI transaction in interrupt context.  Some (most?) SPI
controllers perform the transfer asynchronously and try to sleep.
This is bad, and triggers a BUG().

So, work around this by using adding a hwbus hook for the cw1200 driver
core to call.  The cw1200_spi driver translates this into
irq_disable()/irq_enable() calls instead, which can safely be called in
interrupt context.

Apparently the platforms I used to develop the cw1200_spi driver used
synchronous spi_sync() implementations, which is why this didn't surface
until now.

Many thanks to Dave Sizeburns for the inital bug report and his services
as a tester.

Signed-off-by: Solomon Peachy <pizza@shaftnet.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/cw1200/cw1200_spi.c
drivers/net/wireless/cw1200/fwio.c
drivers/net/wireless/cw1200/hwbus.h
drivers/net/wireless/cw1200/hwio.c

Simple merge
Simple merge
Simple merge