Messages in this thread Patch in this message | | | Subject | Re: [GIT PULL] more x86/apic changes for v2.6.40 | From | Suresh Siddha <> | Date | Tue, 24 May 2011 10:45:31 -0700 |
| |
On Mon, 2011-05-23 at 23:15 -0700, Ingo Molnar wrote: > * Ingo Molnar <mingo@elte.hu> wrote: > > > Possibly the resume fix in the APIC merge :-/ > > > > It's these commits: > > > > 31dce14a3269: x86, ioapic: Use ioapic_saved_data while enabling intr-remapping > > 4c79185cdb14: x86, ioapic: Allocate ioapic_saved_data early > > b64ce24daffb: x86, ioapic: Fix potential resume deadlock > > > > The first one fixes the resume bug in an easily backportable way (although > > the GFP_ATOMIC is not nice), the later two do it cleaner. > > > > So if b64ce24daffb works for you and 31dce14a3269 breaks this would signal > > that the fix from Suresh is the source of the Atom regression. > > In particular the lapic_resume() bit looks suspect. Does save_ioapic_entries() > get called? It's called in enable_IR_x2apic() but your Atom is probably not > x2apic. Non-x2apic system do not get save_ioapic_entries() called, so there's > nothing to restore at resume time AFAICS ... Suresh?
Patch appended(I am sorry, should have caught this earlier. Looks like my system does keep the ioapic state intact during suspend/resume.)
--- From: Suresh Siddha <suresh.b.siddha@intel.com> Subject: x86, ioapic: restore ioapic entries during resume properly
In mask/restore_ioapic_entries, we should be restoring ioapic entries when ioapics[apic].saved_registers is not NULL. Fix the typo and address the resume regression.
Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> ---
arch/x86/kernel/apic/io_apic.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 9488dcf..e529339 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -676,7 +676,7 @@ void mask_ioapic_entries(void) int apic, pin; for (apic = 0; apic < nr_ioapics; apic++) { - if (ioapics[apic].saved_registers) + if (!ioapics[apic].saved_registers) continue; for (pin = 0; pin < ioapics[apic].nr_registers; pin++) { @@ -699,7 +699,7 @@ int restore_ioapic_entries(void) int apic, pin; for (apic = 0; apic < nr_ioapics; apic++) { - if (ioapics[apic].saved_registers) + if (!ioapics[apic].saved_registers) continue; for (pin = 0; pin < ioapics[apic].nr_registers; pin++)
| |