https://github.com/torvalds/linux
Revision 1b3ed367ce11fb39a345d807ef4168f727236083 authored by Rabin Vincent on 12 June 2015, 08:01:56 UTC, committed by Ralf Baechle on 13 June 2015, 09:33:00 UTC
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>
1 parent 9cc719a
History
Tip revision: 1b3ed367ce11fb39a345d807ef4168f727236083 authored by Rabin Vincent on 12 June 2015, 08:01:56 UTC
IRQCHIP: mips-gic: Don't nest calls to do_IRQ()
Tip revision: 1b3ed36

README.AddingFirmware

back to top