linux/arch/mips/cavium-octeon
Alex Smith 4ace6139bf MIPS: SMP: Don't increment irq_count multiple times for call function IPIs
The majority of SMP platforms handle their IPIs through do_IRQ()
which calls irq_{enter/exit}(). When a call function IPI is received,
smp_call_function_interrupt() is called which also calls
irq_{enter,exit}(), meaning irq_count is raised twice.

When tick broadcasting is used (which is implemented via a call
function IPI), this incorrectly causes all CPU idle time on the core
receiving broadcast ticks to be accounted as time spent servicing
IRQs, as account_process_tick() will account as such if irq_count is
greater than 1. This results in 100% CPU usage being reported on a
core which receives its ticks via broadcast.

This patch removes the SMP smp_call_function_interrupt() wrapper which
calls irq_{enter,exit}(). Platforms which handle their IPIs through
do_IRQ() now call generic_smp_call_function_interrupt() directly to
avoid incrementing irq_count a second time. Platforms which don't
(loongson, sgi-ip27, sibyte) call generic_smp_call_function_interrupt()
wrapped in irq_{enter,exit}().

Signed-off-by: Alex Smith <alex.smith@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/10770/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2015-08-03 09:25:12 +02:00
..
crypto Merge branch 'mvebu/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc 2015-06-19 22:07:07 +08:00
executive MIPS: Octeon: Turn hardware bitfields and structures inside out. 2015-04-01 17:22:14 +02:00
cpu.c MIPS: Octeon: Place cnmips_cu2_setup in __init memory. 2010-10-04 18:34:00 +01:00
csrc-octeon.c MIPS: OCTEON: More OCTEONIII support 2015-02-20 15:32:46 +01:00
dma-octeon.c MIPS: OCTEON: dma-octeon: fix OHCI USB config check 2015-03-25 13:47:57 +01:00
flash_setup.c MIPS: Octeon: Don't set .owner. 2015-04-08 01:10:53 +02:00
Kconfig treewide: Fix typos in Kconfig 2014-09-26 11:12:28 +02:00
Makefile of: clean-up unnecessary libfdt include paths 2015-06-04 20:16:47 -05:00
oct_ilm.c MIPS: Octeon: remove unnecessary null test before debugfs_remove_recursive 2014-08-02 00:06:47 +02:00
octeon_boot.h MIPS: Octeon: Handle bootloader structures in little-endian mode. 2015-04-01 17:21:23 +02:00
octeon-irq.c MIPS, IRQ: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc 2015-06-21 21:53:47 +02:00
octeon-memcpy.S MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
octeon-platform.c MIPS: Octeon: Set appropriate endianness in L2C registers 2015-04-01 17:22:14 +02:00
Platform MIPS: OCTEON: Rename Kconfig CAVIUM_OCTEON_REFERENCE_BOARD to CAVIUM_OCTEON_SOC 2013-06-10 18:01:25 +02:00
setup.c MIPS: mark prom_free_prom_memory() everywhere with __init 2015-04-01 17:21:58 +02:00
smp.c MIPS: SMP: Don't increment irq_count multiple times for call function IPIs 2015-08-03 09:25:12 +02:00