b43: Fix SDIO interrupt handler deadlock
PATCH 1/1 b43: Fix SDIO interrupt handler deadlock
We need to release the SDIO host before locking the driver mutex.
Signed-off-by Michael Buesch <[email protected]>
---
drivers/net/wireless/b43/main.c +0 -6
@@ -1914,20 +1914,14 @@ static irqreturn_t b43_interrupt_handlerstatic void b43_sdio_interrupt_handler (struct b43_wldev *dev) {struct b43_wl *wl = dev->wl; -struct sdio_func *func = dev->dev->bus->host_sdio;irqreturn_t ret; -if (unlikely (b43_status (dev) <B43_STAT_STARTED )) -return ; -mutex_lock (&wl->mutex); -sdio_release_host (func); ret =b43_do_interrupt (dev);if (ret ==IRQ_WAKE_THREAD )b43_do_interrupt_thread (dev); -sdio_claim_host (func);mutex_unlock (&wl->mutex); }
drivers/net/wireless/b43/sdio.c +5 -0
@@ -54,7 +54,12 @@ static void b43_sdio_interrupt_dispatchestruct b43_sdio *sdio =sdio_get_drvdata (func);struct b43_wldev *dev = sdio->irq_handler_opaque; +if (unlikely (b43_status (dev) <B43_STAT_STARTED )) +return ; + +sdio_release_host (func); sdio->irq_handler (dev); +sdio_claim_host (func); } int b43_sdio_request_irq(struct b43_wldev *dev,
Signature · 1 line
Greetings, Michael.