Browse Source

mwifiex: avoid double-disable_irq() race

We have a race where the wakeup IRQ might be in flight while we're
calling mwifiex_disable_wake() from resume(). This can leave us
disabling the IRQ twice.

Let's disable the IRQ and enable it in case if we have double-disabled
it.

Signed-off-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
lynxis/untested/v4.19.128
Brian Norris 5 years ago
committed by Kalle Valo
parent
commit
b9da4d223b
  1. 9
      drivers/net/wireless/marvell/mwifiex/main.h

9
drivers/net/wireless/marvell/mwifiex/main.h

@ -1424,8 +1424,13 @@ static inline void mwifiex_disable_wake(struct mwifiex_adapter *adapter)
{
if (adapter->irq_wakeup >= 0) {
disable_irq_wake(adapter->irq_wakeup);
if (!adapter->wake_by_wifi)
disable_irq(adapter->irq_wakeup);
disable_irq(adapter->irq_wakeup);
if (adapter->wake_by_wifi)
/* Undo our disable, since interrupt handler already
* did this.
*/
enable_irq(adapter->irq_wakeup);
}
}

Loading…
Cancel
Save