IRQCHIP: mips-gic: Don't nest calls to do_IRQ()
authorRabin Vincent <rabin.vincent@axis.com>
Fri, 12 Jun 2015 08:01:56 +0000 (10:01 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 13 Jun 2015 09:33:00 +0000 (11:33 +0200)
commit1b3ed367ce11fb39a345d807ef4168f727236083
treebe2d9178cc1b9503d664e099de37fd87134ecbaf
parent9cc719ab3f4f639d629ac8ff09e9b998bc006f68
IRQCHIP: mips-gic: Don't nest calls to do_IRQ()

The GIC chained handlers use do_IRQ() to call the subhandlers.  This
means that irq_enter() calls get nested, which leads to preempt count
looking like we're in nested interrupts, which in turn leads to all
system time being accounted as IRQ time in account_system_time().

Fix it by using generic_handle_irq().  Since these same functions are
used in some systems (if cpu_has_veic) from a low-level vectored
interrupt handler which does not go throught do_IRQ(), we need to do it
conditionally.

Signed-off-by: Rabin Vincent <rabin.vincent@axis.com>
Reviewed-by: Andrew Bresticker <abrestic@chromium.org>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mips@linux-mips.org
Cc: tglx@linutronix.de
Cc: jason@lakedaemon.net
Patchwork: https://patchwork.linux-mips.org/patch/10545/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
drivers/irqchip/irq-mips-gic.c