patch-2.4.8 linux/arch/ia64/kernel/irq_ia64.c
Next file: linux/arch/ia64/kernel/irq_lsapic.c
Previous file: linux/arch/ia64/kernel/irq.c
Back to the patch index
Back to the overall index
- Lines: 60
- Date:
Tue Jul 31 10:30:08 2001
- Orig file:
v2.4.7/linux/arch/ia64/kernel/irq_ia64.c
- Orig date:
Thu Apr 5 12:51:47 2001
diff -u --recursive --new-file v2.4.7/linux/arch/ia64/kernel/irq_ia64.c linux/arch/ia64/kernel/irq_ia64.c
@@ -72,6 +72,11 @@
ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
{
unsigned long saved_tpr;
+#ifdef CONFIG_SMP
+# define IS_RESCHEDULE(vec) (vec == IA64_IPI_RESCHEDULE)
+#else
+# define IS_RESCHEDULE(vec) (0)
+#endif
#if IRQ_DEBUG
{
@@ -110,24 +115,25 @@
*/
saved_tpr = ia64_get_tpr();
ia64_srlz_d();
- do {
- ia64_set_tpr(vector);
- ia64_srlz_d();
-
- do_IRQ(local_vector_to_irq(vector), regs);
-
- /*
- * Disable interrupts and send EOI:
- */
- local_irq_disable();
- ia64_set_tpr(saved_tpr);
+ while (vector != IA64_SPURIOUS_INT_VECTOR) {
+ if (!IS_RESCHEDULE(vector)) {
+ ia64_set_tpr(vector);
+ ia64_srlz_d();
+
+ do_IRQ(local_vector_to_irq(vector), regs);
+
+ /*
+ * Disable interrupts and send EOI:
+ */
+ local_irq_disable();
+ ia64_set_tpr(saved_tpr);
+ }
ia64_eoi();
vector = ia64_get_ivr();
- } while (vector != IA64_SPURIOUS_INT_VECTOR);
+ }
}
#ifdef CONFIG_SMP
-
extern void handle_IPI (int irq, void *dev_id, struct pt_regs *regs);
static struct irqaction ipi_irqaction = {
@@ -147,7 +153,7 @@
if (irq_to_vector(irq) == vec) {
desc = irq_desc(irq);
desc->status |= IRQ_PER_CPU;
- desc->handler = &irq_type_ia64_sapic;
+ desc->handler = &irq_type_ia64_lsapic;
if (action)
setup_irq(irq, action);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)