From: Ingo Molnar Date: Thu, 26 Feb 2009 12:02:23 +0000 (+0100) Subject: Merge branch 'x86/core' into perfcounters/core X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=8e818179eb9e8f9e44d8410dd2a25077d026a08e;p=deliverable%2Flinux.git Merge branch 'x86/core' into perfcounters/core Conflicts: arch/x86/kernel/apic/apic.c arch/x86/kernel/irqinit_32.c Signed-off-by: Ingo Molnar --- 8e818179eb9e8f9e44d8410dd2a25077d026a08e diff --cc arch/x86/kernel/apic/apic.c index d1bf032ba26f,f9cecdfd05c5..4732768c5348 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@@ -34,8 -34,6 +34,7 @@@ #include #include +#include - #include #include #include #include diff --cc arch/x86/kernel/irqinit_32.c index 520e6c1c5d22,50b8c3a3006c..f3e11cb295c4 --- a/arch/x86/kernel/irqinit_32.c +++ b/arch/x86/kernel/irqinit_32.c @@@ -163,40 -178,12 +163,40 @@@ static void __init apic_intr_init(void /* IPI vectors for APIC spurious and error interrupts */ alloc_intr_gate(SPURIOUS_APIC_VECTOR, spurious_interrupt); alloc_intr_gate(ERROR_APIC_VECTOR, error_interrupt); -#endif +# ifdef CONFIG_PERF_COUNTERS + alloc_intr_gate(LOCAL_PERF_VECTOR, perf_counter_interrupt); +# endif -#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_MCE_P4THERMAL) +# ifdef CONFIG_X86_MCE_P4THERMAL /* thermal monitor LVT interrupt */ alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt); +# endif #endif +} + +/* Overridden in paravirt.c */ +void init_IRQ(void) __attribute__((weak, alias("native_init_IRQ"))); + +void __init native_init_IRQ(void) +{ + int i; + - /* all the set up before the call gates are initialised */ - pre_intr_init_hook(); ++ /* Execute any quirks before the call gates are initialised: */ ++ x86_quirk_pre_intr_init(); + + apic_intr_init(); + + /* + * Cover the whole vector space, no vector can escape + * us. (some of these will be overridden and become + * 'special' SMP interrupts) + */ + for (i = 0; i < (NR_VECTORS - FIRST_EXTERNAL_VECTOR); i++) { + int vector = FIRST_EXTERNAL_VECTOR + i; + /* SYSCALL_VECTOR was reserved in trap_init. */ + if (!test_bit(vector, used_vectors)) + set_intr_gate(vector, interrupt[i]); + } if (!acpi_ioapic) setup_irq(2, &irq2);