From: Ingo Molnar This patch converts all the x86_64 PIC controllers layers to the new and simpler irq-chip interrupt handling layer. [mingo@elte.hu: The patch also enables the fasteoi handler for x86_64] Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner Cc: Benjamin Herrenschmidt Cc: Roland Dreier Signed-off-by: Andrew Morton --- arch/x86_64/kernel/i8259.c | 50 +++--------- arch/x86_64/kernel/io_apic.c | 130 +++++++-------------------------- arch/x86_64/kernel/irq.c | 5 - include/asm-x86_64/hw_irq.h | 2 4 files changed, 44 insertions(+), 143 deletions(-) diff -puN arch/x86_64/kernel/i8259.c~genirq-convert-the-x86_64-architecture-to-irq-chips arch/x86_64/kernel/i8259.c --- a/arch/x86_64/kernel/i8259.c~genirq-convert-the-x86_64-architecture-to-irq-chips +++ a/arch/x86_64/kernel/i8259.c @@ -121,42 +121,15 @@ void (*interrupt[NR_IRQS])(void) = { * moves to arch independent land */ -DEFINE_SPINLOCK(i8259A_lock); - static int i8259A_auto_eoi; - -static void end_8259A_irq (unsigned int irq) -{ - if (irq > 256) { - char var; - printk("return %p stack %p ti %p\n", __builtin_return_address(0), &var, task_thread_info(current)); - - BUG(); - } - - if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)) && - irq_desc[irq].action) - enable_8259A_irq(irq); -} - -#define shutdown_8259A_irq disable_8259A_irq - +DEFINE_SPINLOCK(i8259A_lock); static void mask_and_ack_8259A(unsigned int); -static unsigned int startup_8259A_irq(unsigned int irq) -{ - enable_8259A_irq(irq); - return 0; /* never anything pending */ -} - -static struct hw_interrupt_type i8259A_irq_type = { - .typename = "XT-PIC", - .startup = startup_8259A_irq, - .shutdown = shutdown_8259A_irq, - .enable = enable_8259A_irq, - .disable = disable_8259A_irq, - .ack = mask_and_ack_8259A, - .end = end_8259A_irq, +static struct irq_chip i8259A_chip = { + .name = "XT-PIC", + .mask = disable_8259A_irq, + .unmask = enable_8259A_irq, + .mask_ack = mask_and_ack_8259A, }; /* @@ -231,7 +204,7 @@ void make_8259A_irq(unsigned int irq) { disable_irq_nosync(irq); io_apic_irqs &= ~(1<typename); + seq_printf(p, " %8s", irq_desc[i].chip->name); + seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq)); seq_printf(p, " %s", action->name); for (action=action->next; action; action = action->next) @@ -117,7 +118,7 @@ asmlinkage unsigned int do_IRQ(struct pt #ifdef CONFIG_DEBUG_STACKOVERFLOW stack_overflow_check(regs); #endif - __do_IRQ(irq, regs); + generic_handle_irq(irq, regs); irq_exit(); return 1; diff -puN include/asm-x86_64/hw_irq.h~genirq-convert-the-x86_64-architecture-to-irq-chips include/asm-x86_64/hw_irq.h --- a/include/asm-x86_64/hw_irq.h~genirq-convert-the-x86_64-architecture-to-irq-chips +++ a/include/asm-x86_64/hw_irq.h @@ -19,8 +19,6 @@ #include #include #include - -struct hw_interrupt_type; #endif #define NMI_VECTOR 0x02 _