Re: [PATCH] PM: suspend_device_irqs(): don't disable wakeup IRQs

From: Arve Hjønnevåg
Date: Wed May 06 2009 - 21:18:35 EST


On Wed, May 6, 2009 at 5:16 PM, Kevin Hilman
<khilman@xxxxxxxxxxxxxxxxxxx> wrote:
> "Rafael J. Wysocki" <rjw@xxxxxxx> writes:
>
>> On Wednesday 06 May 2009, Kevin Hilman wrote:
>>> Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> writes:

> There is at least one problem with that which is why Kyuwon Kim added
> the ->disable hook to OMAP's irq_chip.  The problem is with drivers
> that call disable_irq() in their suspend hook, usually done to prevent
> the device from waking the system since on OMAP, any IRQ can be
> configured to wake the system.
>

This does not sound correct. disable_irq_wake should be used for this.
A driver may need to mask its interrupt before suspending but this
should not also disable it as a wakeup source.

> If a driver's suspend hook calls disable_irq() and the system is
> suspended before the lazy disable happens in the next handler, then
> the system will be suspended with that device's IRQ still enabled.
> Without an irq_chip->disable hook, that will result in that device IRQ
> waking up the system if it fires.

The platform suspend code needs to write the wakeup mask into
interrupt controller the before entering suspend.


--
Arve Hjønnevåg
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/