|
@@ -1317,6 +1317,29 @@ void smp_error_interrupt(struct pt_regs *regs)
|
|
|
irq_exit();
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_SMP
|
|
|
+void __init smp_intr_init(void)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * IRQ0 must be given a fixed assignment and initialized,
|
|
|
+ * because it's used before the IO-APIC is set up.
|
|
|
+ */
|
|
|
+ set_intr_gate(FIRST_DEVICE_VECTOR, interrupt[0]);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The reschedule interrupt is a CPU-to-CPU reschedule-helper
|
|
|
+ * IPI, driven by wakeup.
|
|
|
+ */
|
|
|
+ set_intr_gate(RESCHEDULE_VECTOR, reschedule_interrupt);
|
|
|
+
|
|
|
+ /* IPI for invalidation */
|
|
|
+ set_intr_gate(INVALIDATE_TLB_VECTOR, invalidate_interrupt);
|
|
|
+
|
|
|
+ /* IPI for generic function call */
|
|
|
+ set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* Initialize APIC interrupts
|
|
|
*/
|