• Thomas Gleixner's avatar
    genirq: Allow check_wakeup_irqs to notice level-triggered interrupts · d4dc0f90
    Thomas Gleixner authored
    Level triggered interrupts do not cause IRQS_PENDING to be set when
    they fire while "disabled" as the 'pending' state is always present in
    the level - they automatically refire where re-enabled.
    
    However the IRQS_PENDING flag is also used to abort a suspend cycle -
    if any 'is_wakeup_set' interrupt is PENDING, check_wakeup_irqs() will
    cause suspend to abort. Without IRQS_PENDING, suspend won't abort.
    
    Consequently, level-triggered interrupts that fire during the 'noirq'
    phase of suspend do not currently abort suspend.
    
    So set IRQS_PENDING even for level triggered interrupts, and make sure
    to clear the flag in check_irq_resend.
    
    [ Changelog by courtesy of Neil ]
    Tested-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    d4dc0f90
chip.c 18.6 KB