Re: [RFC][PATCH 2/2] PM: Rework handling of interrupts during suspend-resume

Linus Torvalds
2009-02-26T22:10:39Z

On Thu, 26 Feb 2009, Rafael J. Wysocki wrote:
>
> Well, how exactly the $subject patch does cause this problem to happen?

Rafael, the problem is that if an interrupt happens while it's disabled -
but before the CPU has actually turned all interrupts off - the CPU will
ACK the interrupt (but just set a flag for it being PENDING), so now the
chipset logic around it will not see it as pending any more, so now the
chipset won't auto-wake the CPU immediately (or more likely, it won't
even suspend it).

It's trivial to fix multiple ways, so I wouldn't worry. The most trivial
way is to just have some sysdev drievr code simply do something like

static int sysdev_suspend()
{
for_each_irq(irq,desc) {
if (!(desc->flags & IRQF_WAKE))
continue;
if (desc->flags & IRQ_PENDING)
return -EBUSY;
}
return 0;
}

and that should automatically mean that if any irq is pending, the suspend
will fail and we'll immediately wake up again.

It looks trivial, and I don't understand why Arve can't just do the sysdev
thing.

Linus