On Mon, Apr 29, 2019 at 5:55 AM Nicolas Boichat <drinkcat@xxxxxxxxxxxx> wrote: > Before suspending, mtk-eint would set the interrupt mask to the > one in wake_mask. However, some of these interrupts may not have a > corresponding interrupt handler, or the interrupt may be disabled. > > On resume, the eint irq handler would trigger nevertheless, > and irq/pm.c:irq_pm_check_wakeup would be called, which would > try to call irq_disable. However, if the interrupt is not enabled > (irqd_irq_disabled(&desc->irq_data) is true), the call does nothing, > and the interrupt is left enabled in the eint driver. > > Especially for level-sensitive interrupts, this will lead to an > interrupt storm on resume. > > If we detect that an interrupt is only in wake_mask, but not in > cur_mask, we can just mask it out immediately (as mtk_eint_resume > would do anyway at a later stage in the resume sequence, when > restoring cur_mask). > > Fixes: bf22ff45bed ("genirq: Avoid unnecessary low level irq function calls") > Signed-off-by: Nicolas Boichat <drinkcat@xxxxxxxxxxxx> Patch applied for fixes. Hm a late ACK made me miss this, sorry. Yours, Linus Walleij