|
@@ -164,22 +164,8 @@ static void __init init_ISA_irqs (void)
|
|
|
|
|
|
void init_IRQ(void) __attribute__((weak, alias("native_init_IRQ")));
|
|
|
|
|
|
-void __init native_init_IRQ(void)
|
|
|
+void __init smp_intr_init(void)
|
|
|
{
|
|
|
- int i;
|
|
|
-
|
|
|
- init_ISA_irqs();
|
|
|
- /*
|
|
|
- * 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;
|
|
|
- if (vector != IA32_SYSCALL_VECTOR)
|
|
|
- set_intr_gate(vector, interrupt[i]);
|
|
|
- }
|
|
|
-
|
|
|
#ifdef CONFIG_SMP
|
|
|
/*
|
|
|
* The reschedule interrupt is a CPU-to-CPU reschedule-helper
|
|
@@ -207,6 +193,14 @@ void __init native_init_IRQ(void)
|
|
|
/* Low priority IPI to cleanup after moving an irq */
|
|
|
set_intr_gate(IRQ_MOVE_CLEANUP_VECTOR, irq_move_cleanup_interrupt);
|
|
|
#endif
|
|
|
+}
|
|
|
+
|
|
|
+void __init apic_intr_init(void)
|
|
|
+{
|
|
|
+#ifdef CONFIG_SMP
|
|
|
+ smp_intr_init();
|
|
|
+#endif
|
|
|
+
|
|
|
alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt);
|
|
|
alloc_intr_gate(THRESHOLD_APIC_VECTOR, threshold_interrupt);
|
|
|
|
|
@@ -216,6 +210,25 @@ void __init native_init_IRQ(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);
|
|
|
+}
|
|
|
+
|
|
|
+void __init native_init_IRQ(void)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ init_ISA_irqs();
|
|
|
+ /*
|
|
|
+ * 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;
|
|
|
+ if (vector != IA32_SYSCALL_VECTOR)
|
|
|
+ set_intr_gate(vector, interrupt[i]);
|
|
|
+ }
|
|
|
+
|
|
|
+ apic_intr_init();
|
|
|
|
|
|
if (!acpi_ioapic)
|
|
|
setup_irq(2, &irq2);
|