x86: Force irq complete move during cpu offline
authorSuresh Siddha <suresh.b.siddha@intel.com>
Mon, 26 Oct 2009 22:24:34 +0000 (14:24 -0800)
committerIngo Molnar <mingo@elte.hu>
Mon, 2 Nov 2009 14:56:36 +0000 (15:56 +0100)
commita5e74b841930bec78a4684ab9f208b2ddfe7c736
tree46af59815263c8f16269a80ffb511788aee1ee74
parent23359a88e7eca3c4f402562b102f23014db3c2aa
x86: Force irq complete move during cpu offline

When a cpu goes offline, fixup_irqs() try to move irq's
currently destined to the offline cpu to a new cpu. But this
attempt will fail if the irq is recently moved to this cpu and
the irq still hasn't arrived at this cpu (for non intr-remapping
platforms this is when we free the vector allocation at the
previous destination) that is about to go offline.

This will endup with the interrupt subsystem still pointing the
irq to the offline cpu, causing that irq to not work any more.

Fix this by forcing the irq to complete its move (its been a
long time we moved the irq to this cpu which we are offlining
now) and then move this irq to a new cpu before this cpu goes
offline.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Acked-by: Gary Hade <garyhade@us.ibm.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
LKML-Reference: <20091026230001.848830905@sbs-t61.sc.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/irq.h
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/irq.c