On IA64, the timer interrupt is not (always?) zero as it is on x86 platforms.
Also, the timer interrupt is CPU-local. Two things need to be changed to make
the irqpoll option make also working on IA64:
o Call note_interrupt() also on CPU-local interrupts in __do_IRQ().
o Set a variable timer_irq to the value of the timer interrupt
after the timer interrupt has been registered and assigned.
That requires changes in Linux-generic files. The default of timer_irq is 0, so
the patch doesn't break i386/x86_64. However, other platforms also may also
have a timer interrupt non-equal to zero, so they can also use the new
set_timer_interrupt() function.
The patch is against 2.6.21-rc4. Please give me your input how to improve
the way it's done if you don't like the way I did the change. irqpoll is
required to work with kdump in some situations and that's why I discovered
that kdump doesn't work on that platform (HP rx2660).
Signed-off-by: Bernhard Walle <bwalle@xxxxxxx>
---
arch/ia64/kernel/irq_ia64.c | 6 +++++-
arch/ia64/kernel/time.c | 6 +++++-
include/asm-ia64/hw_irq.h | 2 +-
include/linux/irq.h | 3 +++
kernel/irq/handle.c | 2 ++
kernel/irq/spurious.c | 10 +++++++++-
6 files changed, 25 insertions(+), 4 deletions(-)
Index: mainline-msi-init/arch/ia64/kernel/irq_ia64.c
===================================================================
--- mainline-msi-init.orig/arch/ia64/kernel/irq_ia64.c
+++ mainline-msi-init/arch/ia64/kernel/irq_ia64.c
@@ -280,11 +280,12 @@ static struct irqaction resched_irqactio
};
#endif
-void
+int
register_percpu_irq (ia64_vector vec, struct irqaction *action)
{
@@ -174,6 +175,13 @@ void note_interrupt(unsigned int irq, st
desc->irqs_unhandled = 0;
}
+
+void set_timer_interrupt(unsigned int irq)