linux/drivers/irqchip
Julien Thierry 17ce302f31 arm64: Fix interrupt tracing in the presence of NMIs
In the presence of any form of instrumentation, nmi_enter() should be
done before calling any traceable code and any instrumentation code.

Currently, nmi_enter() is done in handle_domain_nmi(), which is much
too late as instrumentation code might get called before. Move the
nmi_enter/exit() calls to the arch IRQ vector handler.

On arm64, it is not possible to know if the IRQ vector handler was
called because of an NMI before acknowledging the interrupt. However, It
is possible to know whether normal interrupts could be taken in the
interrupted context (i.e. if taking an NMI in that context could
introduce a potential race condition).

When interrupting a context with IRQs disabled, call nmi_enter() as soon
as possible. In contexts with IRQs enabled, defer this to the interrupt
controller, which is in a better position to know if an interrupt taken
is an NMI.

Fixes: bc3c03ccb4 ("arm64: Enable the support of pseudo-NMIs")
Cc: <stable@vger.kernel.org> # 5.1.x-
Cc: Will Deacon <will.deacon@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Julien Thierry <julien.thierry@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2019-06-21 15:49:58 +01:00
..
alphascale_asm9260-icoll.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
exynos-combiner.c irqchip/exynos-combiner: Fix usage of __raw IO 2016-06-23 18:26:42 +00:00
irq-alpine-msi.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
irq-armada-370-xp.c irqchip updates for 4.14 2017-08-31 20:12:51 +02:00
irq-aspeed-i2c-ic.c irqchip/aspeed-i2c-ic: Fix return value check in aspeed_i2c_ic_of_init() 2017-10-19 11:22:43 +01:00
irq-aspeed-vic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
irq-ath79-cpu.c
irq-ath79-misc.c MIPS: perf: ath79: Fix perfcount IRQ assignment 2019-04-16 15:09:10 -07:00
irq-ativic32.c nds32: Power management for nds32 2018-11-06 18:01:41 +08:00
irq-atmel-aic5.c irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-atmel-aic-common.c irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-atmel-aic-common.h irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-atmel-aic.c irqchip/atmel-aic: Remove root argument from ->fixup() prototype 2017-07-04 11:10:37 +01:00
irq-bcm2835.c irqchip: bcm283x: Switch to SPDX identifier 2018-12-13 09:35:36 +00:00
irq-bcm2836.c irqchip: bcm283x: Switch to SPDX identifier 2018-12-13 09:35:36 +00:00
irq-bcm6345-l1.c irqchip/bcm-6345-l1: Report that effective affinity is a single target 2017-08-18 10:54:41 +02:00
irq-bcm7038-l1.c irqchip/bcm: Restore registration print with %pOF 2019-04-29 15:00:02 +01:00
irq-bcm7120-l2.c irqchip/bcm: Restore registration print with %pOF 2019-04-29 15:00:02 +01:00
irq-brcmstb-l2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
irq-clps711x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-crossbar.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-csky-apb-intc.c irqchip/csky: fixup handle_irq_perbit break irq 2019-01-09 00:18:46 +08:00
irq-csky-mpintc.c irqchip: add C-SKY SMP interrupt controller 2018-10-26 00:54:29 +08:00
irq-davinci-aintc.c irqchip: davinci-aintc: move the driver to drivers/irqchip 2019-02-19 20:02:17 +05:30
irq-davinci-cp-intc.c irqchip: davinci-cp-intc: move the driver to drivers/irqchip 2019-02-19 20:03:42 +05:30
irq-digicolor.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-dw-apb-ictl.c genirq: Fix various typos in comments 2018-12-18 14:22:28 +01:00
irq-eznps.c irqchip/eznps: Drop pointless static qualifier in nps400_of_init() 2016-10-19 14:24:36 +02:00
irq-ftintc010.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-gic-common.c irqchip/gic: Add support to device tree based quirks 2018-12-13 17:23:37 +00:00
irq-gic-common.h irqchip/gic: Add support to device tree based quirks 2018-12-13 17:23:37 +00:00
irq-gic-pm.c irqchip/gic-pm: Fix suspend handling 2019-04-29 15:45:01 +01:00
irq-gic-realview.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-gic-v2m.c Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-05-19 10:58:45 -07:00
irq-gic-v3-its-fsl-mc-msi.c irqchip/gic-v3-its: Move minimum LPI requirements to individual busses 2018-07-16 14:22:19 +01:00
irq-gic-v3-its-pci-msi.c acpi: Create subtable parsing infrastructure 2019-04-04 18:41:12 +02:00
irq-gic-v3-its-platform-msi.c acpi: Create subtable parsing infrastructure 2019-04-04 18:41:12 +02:00
irq-gic-v3-its.c Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-05-19 10:58:45 -07:00
irq-gic-v3-mbi.c irqchip/gic-v3-mbi: Don't map the MSI page in mbi_compose_m{b, s}i_msg() 2019-05-03 15:30:03 +01:00
irq-gic-v3.c arm64: Fix interrupt tracing in the presence of NMIs 2019-06-21 15:49:58 +01:00
irq-gic-v4.c irqchip/gic-v4: Clear IRQ_DISABLE_UNLAZY again if mapping fails 2017-11-10 09:50:36 +00:00
irq-gic.c acpi: Create subtable parsing infrastructure 2019-04-04 18:41:12 +02:00
irq-goldfish-pic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-hip04.c irqchip/hip04: Report that effective affinity is a single target 2017-08-18 10:54:42 +02:00
irq-i8259.c irqchip/i8259: Fix shutdown order by moving syscore_ops registration 2019-02-14 10:42:11 +00:00
irq-imgpdc.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
irq-imx-gpcv2.c irqchip/irq-imx-gpcv2: Add IRQCHIP_DECLARE for i.MX8MQ compatible 2018-12-18 12:59:18 +00:00
irq-imx-irqsteer.c irqchip/imx-irqsteer: Use devm_platform_ioremap_resource() to simplify code 2019-04-29 15:45:00 +01:00
irq-ingenic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 151 2019-05-30 11:26:28 -07:00
irq-ixp4xx.c irqchip: ixp4xx: Add OF initialization support 2019-04-23 16:02:14 +02:00
irq-jcore-aic.c irqchip/jcore: Fix lost per-cpu interrupts 2016-10-14 14:26:55 +02:00
irq-keystone.c irqchip/keystone: Fix "scheduling while atomic" on rt 2016-12-31 18:41:45 +00:00
irq-lpc32xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 159 2019-05-30 11:26:37 -07:00
irq-ls1x.c irqchip/irq-ls1x: Missing error code in ls1x_intc_of_init() 2019-04-05 14:37:56 +02:00
irq-ls-scfg-msi.c irqchip/ls-scfg-msi: Don't map the MSI page in ls_scfg_msi_compose_msg() 2019-05-03 15:20:20 +01:00
irq-madera.c irqchip/madera: Drop GPIO includes 2019-01-17 17:04:24 +00:00
irq-mbigen.c irqchip/mbigen: Don't clear eventid when freeing an MSI 2019-03-21 11:08:26 +00:00
irq-meson-gpio.c irqchip/meson-gpio: Add support for Meson-AXG SoCs 2018-05-24 12:34:18 +01:00
irq-mips-cpu.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-mips-gic.c irqchip/mips-gic: Avoid spuriously handling masked interrupts 2018-02-16 13:47:58 +00:00
irq-mmp.c irqchip updates for 5.1, take #2 2019-03-21 12:30:54 +01:00
irq-mscc-ocelot.c irqchhip: Convert to using %pOFn instead of device_node.name 2018-12-13 09:35:56 +00:00
irq-mtk-cirq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
irq-mtk-sysirq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
irq-mvebu-gicp.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
irq-mvebu-icu.c irqchip/irq-mvebu-icu: Add support for System Error Interrupts (SEI) 2018-10-02 12:00:30 +01:00
irq-mvebu-odmi.c
irq-mvebu-pic.c irqchip/mvebu-pic: New driver for Marvell Armada 7K/8K PIC 2016-08-22 22:58:27 +00:00
irq-mvebu-sei.c irqchip/irq-mvebu-sei: Make mvebu_sei_ap806_caps static 2019-03-21 16:43:00 +01:00
irq-mxs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 1 2019-05-21 11:28:39 +02:00
irq-nvic.c
irq-omap-intc.c irqchip/irq-omap-intc: Do not statically initialize variables 2017-10-16 21:05:14 +02:00
irq-ompic.c irqchip/ompic: fix return value check in ompic_of_init() 2018-01-04 11:13:22 +00:00
irq-or1k-pic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-orion.c irqchip: Convert to using %pOFn instead of device_node.name 2018-11-27 10:54:17 -06:00
irq-partition-percpu.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
irq-pic32-evic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-rda-intc.c irqchip/irq-rda-intc: Fix return value check in rda8810_intc_init() 2018-12-18 12:55:23 +00:00
irq-renesas-h8s.c genirq: Fix various typos in comments 2018-12-18 14:22:28 +01:00
irq-renesas-h8300h.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-renesas-intc-irqpin.c irqchip/renesas-intc-irqpin: Remove devm_kzalloc() error printing 2019-04-29 16:29:59 +01:00
irq-renesas-irqc.c irqchip/irq-renesas-irqc: Convert to SPDX identifiers 2018-12-13 09:35:37 +00:00
irq-s3c24xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
irq-sa11x0.c
irq-sifive-plic.c irqchip/sifive-plic: Implement irq_set_affinity() for SMP host 2019-02-21 10:32:21 +00:00
irq-sirfsoc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 4 2019-05-21 11:28:40 +02:00
irq-sni-exiu.c irqchip/exiu: Fix return value check in exiu_init() 2017-11-14 11:27:22 +01:00
irq-st.c irqchip/st: Mark st_irq_syscfg_resume() __maybe_unused 2016-12-19 10:55:43 +01:00
irq-stm32-exti.c irqchip/stm32: Use a platform driver for stm32mp1-exti device 2019-04-29 15:45:01 +01:00
irq-sun4i.c irqchip/sun4i: Add support for Allwinner ARMv5 F1C100s 2018-12-13 09:35:58 +00:00
irq-sunxi-nmi.c irqchip/sunxi-nmi: Support sun6i-a31-r-intc compatible 2017-06-22 14:08:17 +01:00
irq-tango.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
irq-tb10x.c irqchip: Convert to using %pOFn instead of device_node.name 2018-11-27 10:54:17 -06:00
irq-tegra.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-ti-sci-inta.c irqchip/ti-sci-inta: Add msi domain support 2019-05-01 10:49:17 +01:00
irq-ti-sci-intr.c irqchip/ti-sci-intr: Add support for Interrupt Router driver 2019-05-01 10:48:56 +01:00
irq-ts4800.c
irq-uniphier-aidet.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
irq-versatile-fpga.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
irq-vf610-mscm-ir.c
irq-vic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
irq-vt8500.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
irq-xilinx-intc.c irqchip: Convert to using %pOF instead of full_name 2017-08-23 10:09:28 +01:00
irq-xtensa-mx.c drivers/irqchip: xtensa-mx: fix mask and unmask 2019-01-26 02:02:15 -08:00
irq-xtensa-pic.c drivers/irqchip: xtensa: add warning to irq_retrigger 2019-01-26 02:02:14 -08:00
irq-zevio.c
irqchip.c
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-05-19 10:58:45 -07:00
qcom-irq-combiner.c irqchip/qcom: Fix check for spurious interrupts 2018-05-02 15:56:10 +02:00
qcom-pdc.c irqchip/pdc: Setup all edge interrupts as rising edge at GIC 2018-10-02 10:37:38 +01:00
spear-shirq.c remove lots of IS_ERR_VALUE abuses 2016-05-27 15:26:11 -07:00