Merge branch 'linus' into perfcounters/core-v2
[linux-drm-fsl-dcu.git] / arch / x86 / kernel / irqinit_64.c
index 8cd10537fd46f7480b6db9807db276ada5b390af..665e2ab48abd1371d5e432478b392ab8f773c145 100644 (file)
@@ -152,6 +152,11 @@ 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);
+
+       /* Performance monitoring interrupt: */
+#ifdef CONFIG_PERF_COUNTERS
+       alloc_intr_gate(LOCAL_PERF_VECTOR, perf_counter_interrupt);
+#endif
 }
 
 void __init native_init_IRQ(void)
@@ -159,6 +164,9 @@ void __init native_init_IRQ(void)
        int i;
 
        init_ISA_irqs();
+
+       apic_intr_init();
+
        /*
         * Cover the whole vector space, no vector can escape
         * us. (some of these will be overridden and become
@@ -166,12 +174,10 @@ void __init native_init_IRQ(void)
         */
        for (i = 0; i < (NR_VECTORS - FIRST_EXTERNAL_VECTOR); i++) {
                int vector = FIRST_EXTERNAL_VECTOR + i;
-               if (vector != IA32_SYSCALL_VECTOR)
+               if (!test_bit(vector, used_vectors))
                        set_intr_gate(vector, interrupt[i]);
        }
 
-       apic_intr_init();
-
        if (!acpi_ioapic)
                setup_irq(2, &irq2);
 }