Hi Marc, On Sun, Feb 24, 2019 at 02:04:25PM +0000, Marc Zyngier wrote: > The mwifiex driver makes unsafe assumptions about the state of the > wake-up interrupt. It requests it and only then disable it. Of > course, the interrupt may be screaming for whatever reason at that > time, and the handler will then be called without the interrupt > having been registered with the PM/wakeup subsystem. Oops. > > The right way to handle this kind of situation is to flag the > interrupt with IRQ_NOAUTOEN before requesting it. It will then > stay disabled until someone (the wake-up subsystem) enables it. > > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> This could be: Fixes: 853402a00823 ("mwifiex: Enable WoWLAN for both sdio and pcie") although, that was just borrowing the existing antipattern from SDIO code.. Reviewed-by: Brian Norris <briannorris@xxxxxxxxxxxx> Thanks. > --- > drivers/net/wireless/marvell/mwifiex/main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c > index 2105c2b7c627..82cf35e50579 100644 > --- a/drivers/net/wireless/marvell/mwifiex/main.c > +++ b/drivers/net/wireless/marvell/mwifiex/main.c > @@ -1610,6 +1610,7 @@ static void mwifiex_probe_of(struct mwifiex_adapter *adapter) > "wake-up interrupt outside 'wake-up' subnode of %pOF\n", > adapter->dt_node); > > + irq_set_status_flags(adapter->irq_wakeup, IRQ_NOAUTOEN); > ret = devm_request_irq(dev, adapter->irq_wakeup, > mwifiex_irq_wakeup_handler, IRQF_TRIGGER_LOW, > "wifi_wake", adapter); > @@ -1619,7 +1620,6 @@ static void mwifiex_probe_of(struct mwifiex_adapter *adapter) > goto err_exit; > } > > - disable_irq(adapter->irq_wakeup); > if (device_init_wakeup(dev, true)) { > dev_err(dev, "fail to init wakeup for mwifiex\n"); > goto err_exit; > -- > 2.20.1 >