linux/arch/arm
Will Deacon 1a01753ed9 ARM: gic: use handle_fasteoi_irq for SPIs
Currently, the gic uses handle_level_irq for handling SPIs (Shared
Peripheral Interrupts), requiring active interrupts to be masked at
the distributor level during IRQ handling.

On a virtualised system, only the CPU interfaces are virtualised in
hardware. Accesses to the distributor must be trapped by the
hypervisor, adding latency to the critical interrupt path in Linux.

This patch modifies the GIC code to use handle_fasteoi_irq for handling
interrupts, which only requires us to signal EOI to the CPU interface
when handling is complete. Cascaded IRQ handling is also updated to use
the chained IRQ enter/exit functions to honour the flow control of the
parent chip.

Note that commit 846afbd1 ("GIC: Dont disable INT in ack callback")
broke cascading interrupts by forgetting to add IRQ masking. This is
no longer an issue because the unmask call is now unnecessary.

Tested on Versatile Express and Realview EB (1176 w/ cascaded GICs).

Tested-and-reviewed-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Tested-and-acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2011-05-11 16:04:17 +01:00
..
boot ARM: 6826/1: Merge v6 and v7 DEBUG_LL DCC support 2011-03-28 19:01:43 +01:00
common ARM: gic: use handle_fasteoi_irq for SPIs 2011-05-11 16:04:17 +01:00
configs arm: at91: minimal defconfig for at91x40 SoC 2011-04-23 11:03:06 +08:00
include/asm Merge branch 'kprobes' of git://git.linaro.org/people/nico/linux into fixes 2011-04-29 11:02:45 +01:00
kernel Merge branch 'perf/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing into perf/urgent 2011-05-04 20:33:42 +02:00
lib Merge branches 'fixes', 'pgt-next' and 'versatile' into devel 2011-03-20 09:32:12 +00:00
mach-at91 at91: Add ARCH_ID and basic cpu macros definition for 5series chips family. 2011-04-23 11:03:07 +08:00
mach-bcmring Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-clps711x arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-cns3xxx ARM: P2V: separate PHYS_OFFSET from platform definitions 2011-02-17 23:26:55 +00:00
mach-davinci Merge branch 'fixes' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-05-02 12:17:05 -07:00
mach-dove arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-ebsa110 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-ep93xx Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-exynos4 ARM: s5pv310: update IRQ combiner to use chained entry/exit functions 2011-05-11 16:04:15 +01:00
mach-footbridge arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-gemini arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-h720x arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-imx Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 into devel-stable 2011-03-28 18:52:44 +01:00
mach-integrator Merge branches 'fixes', 'pgt-next' and 'versatile' into devel 2011-03-20 09:32:12 +00:00
mach-iop13xx Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-iop32x arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-iop33x arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-ixp4xx arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-ixp23xx arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-ixp2000 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-kirkwood Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-ks8695 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-l7200/include/mach
mach-loki Merge branch 'devel-stable' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-17 19:08:06 -07:00
mach-lpc32xx Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-mmp ARM: mmp: align NR_BUILTIN_GPIO with gpio interrupt number 2011-04-12 23:26:39 +08:00
mach-msm ARM: msm: update GPIO chained IRQ handler to use entry/exit functions 2011-05-11 16:04:15 +01:00
mach-mv78xx0 arm: Cleanup the irq namespace 2011-03-29 14:47:57 +02:00
mach-mx3 ARM: imx: fix usb related build failure for mach-vpr200 2011-04-12 09:47:55 +02:00
mach-mx5 ARM: mx5/mx53_loco: Fix build warning related to gpio_keys_button structure 2011-04-18 19:51:14 +02:00
mach-mxc91231 ARM: mxc91231/iomux: allow pin_list to be const 2011-03-07 19:29:28 +01:00
mach-mxs ARM: mxs/clock-mx28: fix up name##_set_rate 2011-04-12 09:48:02 +02:00
mach-netx arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-nomadik ARM: P2V: separate PHYS_OFFSET from platform definitions 2011-02-17 23:26:55 +00:00
mach-ns9xxx arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-nuc93x arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-omap1 Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-omap2 Merge branch 'for_tony_a_2.6.39rc' of git://git.pwsan.com/linux-2.6 into devel-fixes 2011-04-27 06:15:27 -07:00
mach-orion5x Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-pnx4008 arm: Cleanup the irq namespace 2011-03-29 14:47:57 +02:00
mach-pxa ARM: pxa/magician: bq24022 regulator needs to be enabled 2011-04-25 12:43:47 +08:00
mach-realview ARM: 6807/1: realview: Fix secondary GIC initialisation for EB with MPCore tile 2011-03-26 10:06:08 +00:00
mach-rpc arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-s3c24a0/include/mach ARM: P2V: separate PHYS_OFFSET from platform definitions 2011-02-17 23:26:55 +00:00
mach-s3c64xx Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-s3c2400 ARM: P2V: separate PHYS_OFFSET from platform definitions 2011-02-17 23:26:55 +00:00
mach-s3c2410 Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-s3c2412 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-s3c2416 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-s3c2440 Merge commit 'v2.6.39-rc3' into for-2.6.39 2011-04-18 17:12:14 +01:00
mach-s3c2443 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-s5p64x0 ARM: S5P64X0: Fix iodesc array size for S5P6450 2011-03-28 16:17:53 +09:00
mach-s5p6442 Merge branch 'p2v' into devel 2011-03-16 23:35:27 +00:00
mach-s5pc100 Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-s5pv210 Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-sa1100 Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-shark arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-shmobile ARM: arch-shmobile: only run FSI init on respective boards 2011-04-06 11:21:38 -07:00
mach-spear3xx ARM: 6794/1: SPEAr: Append UL to device address macros. 2011-03-09 09:50:04 +00:00
mach-spear6xx ARM: 6794/1: SPEAr: Append UL to device address macros. 2011-03-09 09:50:04 +00:00
mach-stmp37xx ARM: stmp37xx: irq_data conversion. 2011-01-13 17:19:02 +01:00
mach-stmp378x ARM: stmp378x: irq_data conversion. 2011-01-13 17:19:01 +01:00
mach-tcc8k arm: Cleanup the irq namespace 2011-03-29 14:47:57 +02:00
mach-tegra ARM: tegra: irq: Add tegra_eoi 2011-05-11 16:04:16 +01:00
mach-u300 Fix common misspellings 2011-03-31 11:26:23 -03:00
mach-ux500 mach-ux500: fix i2c0 device setup regression 2011-04-20 18:43:53 +02:00
mach-versatile arm: versatile : Fix typo introduced in irq namespace cleanup 2011-03-30 12:02:15 +02:00
mach-vexpress ARM: 6771/1: vexpress: add support for multiple core tiles 2011-03-20 09:32:21 +00:00
mach-vt8500 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mach-w90x900 arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
mm ARM: Fix .size directive for xscale_dma_a0_map_area 2011-04-28 17:56:31 +08:00
nwfpe
oprofile Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-02-15 10:18:48 -08:00
plat-iop
plat-mxc Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 into fixes 2011-04-27 08:43:01 +01:00
plat-nomadik ARM: nmk: update GPIO chained IRQ handler to entry/exit functions 2011-05-11 16:04:15 +01:00
plat-omap ARM: omap: update GPIO chained IRQ handler to use entry/exit functions 2011-05-11 16:04:15 +01:00
plat-orion arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
plat-pxa Fix common misspellings 2011-03-31 11:26:23 -03:00
plat-s3c24xx Fix common misspellings 2011-03-31 11:26:23 -03:00
plat-s5p ARM: S5P: Remove unused s3c_pm_check_resume_pin 2011-04-14 13:19:40 +09:00
plat-samsung ARM: SAMSUNG: Fix warning 's3c_pm_show_resume_irqs' defined but not used 2011-04-14 13:20:05 +09:00
plat-spear Fix common misspellings 2011-03-31 11:26:23 -03:00
plat-stmp3xxx arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
plat-tcc ARM: P2V: separate PHYS_OFFSET from platform definitions 2011-02-17 23:26:55 +00:00
plat-versatile arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
tools ARM: Update (and cut down) mach-types 2011-03-20 18:07:44 +00:00
vfp ARM: 6868/1: Preserve the VFP state during fork 2011-04-10 21:13:37 +01:00
Kconfig Merge branch 'fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into fixes 2011-04-13 23:32:13 +01:00
Kconfig-nommu Fix common misspellings 2011-03-31 11:26:23 -03:00
Kconfig.debug ARM: 6876/1: Kconfig.debug: Remove unused CONFIG_DEBUG_ERRORS 2011-04-14 09:15:24 +01:00
Makefile Merge branch 'devel-stable' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-17 19:08:06 -07:00