Re: "APIC error on CPU1: 00(40)" during resume (was: Regression from2.6.26: Hibernation (possibly suspend) broken on Toshiba R500)

From: Linus Torvalds
Date: Wed Dec 10 2008 - 12:14:27 EST




On Wed, 10 Dec 2008, Matthew Garrett wrote:

> On Wed, Dec 10, 2008 at 08:26:37AM -0800, Linus Torvalds wrote:
>
> > So it looks like we don't reprogram the APIC -at-all- on secondary CPU's.
> >
> > What am I missing?
>
> We unplug all CPUs except the boot one at suspend time. Does the APIC
> get reprogrammed when they're replugged on resume?

Ahh, indeed. That ends up doing setup_local_APIC() in smp_callin().

I wonder if we should do that from apic_resume() too - instead of saving
any state we could probably just re-initialize it.

The setup_local_APIC() function also seems to be a lot more careful than
"resume_apic()" is about ordering (well, at least it has _comments_ on the
ordering), and it does things like ack'ing all pending irq's.

Hmm.

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/