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

From: Linus Torvalds
Date: Thu Feb 26 2009 - 17:11:28 EST




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
--
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/