* Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> wrote: > In commit 76d2160147f43f982dfe881404cfde9fd0a9da21, the default > behavior of disable_irq() was changed to delay the disable until it is > next handled. > > However, this leaves open the possibility that the system can go into > suspend with an interrupt enabled. For example, if a driver calls > disable_irq() in its suspend_hook (for example, to prevent that device > IRQ from causing a system wakeup) there's now a possibility that the > system is suspended before the lazy disable happens. > > The result is an unwanted wakeup from suspend if the IRQ is capable of > waking the system (common on embedded SoCs.) > > This patch ensures that the lazy disable is done, and masked by > the irq_chip before the system goes into suspend. > > Note that even though __disable_irq() also calls irq_chip->disable, it > is quite common for the irq_chip not to provide a disable hook in > which case the IRQ is never masked/disabled in hardware before going > into suspend. > > Signed-off-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> > --- > kernel/irq/manage.c | 5 +++++ > 1 files changed, 5 insertions(+), 0 deletions(-) > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > index 2734eca..5d2cc1c 100644 > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -190,6 +190,11 @@ void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) > if (!desc->action || (desc->action->flags & IRQF_TIMER)) > return; > desc->status |= IRQ_SUSPENDED; > + > + /* Lazy disable: handles case where lazy disable in > + * handler doesn't happen before suspend. */ > + if (desc->status & IRQ_DISABLED) > + desc->chip->mask(irq); Please look at the rest of the file and follow the multi-line comment style that is used in the 29 multi-line comment instances there. (which is also what Documentation/CodingStyle specifies) Ingo _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm