x86, irq: Move __setup_vector_irq() before the first irq enable in cpu online path
authorSuresh Siddha <suresh.b.siddha@intel.com>
Fri, 29 Jan 2010 19:42:21 +0000 (11:42 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 29 Jan 2010 22:47:22 +0000 (14:47 -0800)
commit9d133e5db993d577bd868b54083869fe5479fcff
tree24a994d5e8fdadd9bc45b5a9266605dbae7bd034
parent69c89efb51510b3dc0fa336f7fa257c6e1799ee4
x86, irq: Move __setup_vector_irq() before the first irq enable in cpu online path

Lowest priority delivery of logical flat mode is broken on some systems,
such that even when IO-APIC RTE says deliver the interrupt to a particular CPU,
interrupt subsystem delivers the interrupt to totally different CPU.

For example, this behavior was observed on a P4 based system with SiS chipset
which was reported by Li Zefan. We have been handling this kind of behavior by
making sure that in logical flat mode, we assign the same vector to irq
mappings on all the 8 possible logical cpu's.

But we have been doing this initial assignment (__setup_vector_irq()) a little
late (before which interrupts were already enabled for a short duration).

Move the __setup_vector_irq() before the first irq enable point in the
cpu online path to avoid the issue of not handling some interrupts that
wrongly hit the cpu which is still coming online.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <20100129194330.283696385@sbs-t61.sc.intel.com>
Tested-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/smpboot.c