• Ning Jiang's avatar
    genirq: Add IRQS_PENDING for nested and simple irq · 23812b9d
    Ning Jiang authored
    Every interrupt which is an active wakeup source needs the ability to
    abort suspend if there is a pending irq. Right now only edge and level
    irqs can do that.
    
                |
           +---------+
           |   INTC  |
           +---------+
                   | GPIO_IRQ
                +------------+
                |  gpio-exp  |
                +------------+
                  |        |
             GPIO0_IRQ  GPIO1_IRQ
    
    In the above diagram, gpio expander has irq number GPIO_IRQ, it is
    connected with two sub GPIO pins, GPIO0 and GPIO1.
    
    During suspend, we set IRQF_NO_SUSPEND for GPIO_IRQ so that gpio
    expander driver can handle the sub irq GPIO0_IRQ and GPIO1_IRQ, and
    these two irqs themselves can further be handled by simple or nested
    irq in some drivers(typically gpio and mfd driver). If they are used
    as wakeup sources during suspend, we want them to be able to abort
    suspend too.
    
    Setting IRQS_PENDING flag in handle_nested_irq() and handle_simple_irq()
    when the irq is disabled allows check_wakeup_irqs() to identify such
    irqs as source for aborting suspend.
    Signed-off-by: default avatarNing Jiang <ning.n.jiang@gmail.com>
    Cc: rjw@sisk.pl
    Link: http://lkml.kernel.org/r/CAH3Oq6T905%2B3fkF43NAMMFvJvq7dsk_so6T2vQ8ZJrA5xiU3YA@mail.gmail.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    23812b9d
chip.c 18.7 KB