From: Thomas Gleixner Some dumb interrupt hardware has no way to ack/mask.... Instead of creating a seperate chip structure we allow to reuse the already existing no_irq_chip Signed-off-by: Thomas Gleixner Cc: Ingo Molnar Signed-off-by: Andrew Morton --- kernel/irq/handle.c | 9 +++++++-- kernel/irq/manage.c | 2 +- kernel/irq/proc.c | 5 ++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff -puN kernel/irq/handle.c~genirq-allow-usage-of-no_irq_chip kernel/irq/handle.c --- a/kernel/irq/handle.c~genirq-allow-usage-of-no_irq_chip +++ a/kernel/irq/handle.c @@ -62,8 +62,12 @@ struct irq_desc irq_desc[NR_IRQS] __cach */ static void ack_bad(unsigned int irq) { - print_irq_desc(irq, irq_desc + irq); - ack_bad_irq(irq); + struct irq_desc *desc = irq_desc + irq; + + if (desc->handle_irq == handle_bad_irq) { + print_irq_desc(irq, desc); + ack_bad_irq(irq); + } } /* @@ -88,6 +92,7 @@ struct irq_chip no_irq_chip = { .enable = noop, .disable = noop, .ack = ack_bad, + .unmask = noop, .end = noop, }; diff -puN kernel/irq/manage.c~genirq-allow-usage-of-no_irq_chip kernel/irq/manage.c --- a/kernel/irq/manage.c~genirq-allow-usage-of-no_irq_chip +++ a/kernel/irq/manage.c @@ -199,7 +199,7 @@ int setup_irq(unsigned int irq, struct i if (irq >= NR_IRQS) return -EINVAL; - if (desc->chip == &no_irq_chip) + if (desc->handle_irq == &handle_bad_irq) return -ENOSYS; /* * Some drivers like serial.c use request_irq() heavily, diff -puN kernel/irq/proc.c~genirq-allow-usage-of-no_irq_chip kernel/irq/proc.c --- a/kernel/irq/proc.c~genirq-allow-usage-of-no_irq_chip +++ a/kernel/irq/proc.c @@ -116,9 +116,8 @@ void register_irq_proc(unsigned int irq) { char name [MAX_NAMELEN]; - if (!root_irq_dir || - (irq_desc[irq].chip == &no_irq_chip) || - irq_desc[irq].dir) + if (!root_irq_dir || (irq_desc[irq].handle_irq == &handle_bad_irq) || + irq_desc[irq].dir) return; memset(name, 0, MAX_NAMELEN); _