Messages in this thread | | | Date | Wed, 10 Dec 2008 09:13:30 -0800 (PST) | From | Linus Torvalds <> | Subject | Re: "APIC error on CPU1: 00(40)" during resume (was: Regression from 2.6.26: Hibernation (possibly suspend) broken on Toshiba R500) |
| |
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
| |