Skip to content
  • Solomon Peachy's avatar
    cw1200: Don't perform SPI transfers in interrupt context · 2236ad29
    Solomon Peachy authored
    commit aec8e88c
    
     upstream.
    
    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: default avatarSolomon Peachy <pizza@shaftnet.org>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2236ad29