linux/arch/mips
Marc Zyngier 1fee9db9b4 irqchip/mips: Fix RCU violation when using irqdomain lookup on interrupt entry
Since d4a45c68dc ("irqdomain: Protect the linear revmap with RCU"),
any irqdomain lookup requires the RCU read lock to be held.

This assumes that the architecture code will be structured such as
irq_enter() will be called *before* the interrupt is looked up
in the irq domain. However, this isn't the case for MIPS, and a number
of drivers are structured to do it the other way around when handling
an interrupt in their root irqchip (secondary irqchips are OK by
construction).

This results in a RCU splat on a lockdep-enabled kernel when the kernel
takes an interrupt from idle, as reported by Guenter Roeck.

Note that this could have fired previously if any driver had used
tree-based irqdomain, which always had the RCU requirement.

To solve this, provide a MIPS-specific helper (do_domain_IRQ())
as the pendent of do_IRQ() that will do thing in the right order
(and maybe save some cycles in the process).

Ideally, MIPS would be moved over to using handle_domain_irq(),
but that's much more ambitious.

Reported-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
[maz: add dependency on CONFIG_IRQ_DOMAIN after report from the kernelci bot]
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Serge Semin <fancer.lancer@gmail.com>
Link: https://lore.kernel.org/r/20210705172352.GA56304@roeck-us.net
Link: https://lore.kernel.org/r/20210706110647.3979002-1-maz@kernel.org
2021-07-09 10:18:58 +01:00
..
alchemy MIPS: alchemy: xxs1500: add gpio-au1000.h header file 2021-05-25 15:16:23 +02:00
ar7 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
ath25 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
ath79 MIPS: of: Introduce helper function to get DTB 2021-02-04 13:34:51 +01:00
bcm47xx MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
bcm63xx MIPS: BCM63XX: Use BUG_ON instead of condition followed by BUG. 2021-04-26 10:23:52 +02:00
bmips MIPS: bmips: include <linux/dma-direct.h> for phys_to_dma 2021-03-06 08:43:40 +01:00
boot MIPS:DTS:Correct the license for Loongson-2K 2021-04-23 13:41:18 +02:00
cavium-octeon MIPS: octeon: Add __raw_copy_[from|to|in]_user symbols 2021-04-09 11:43:52 +02:00
cobalt MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
configs - removed get_fs/set_fs 2021-04-29 11:28:08 -07:00
crypto - removed get_fs/set_fs 2021-04-29 11:28:08 -07:00
dec MIPS: DEC: Restore bootmem reservation for firmware working memory area 2020-10-14 23:57:57 +02:00
fw MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
generic MIPS: generic: Update node names to avoid unit addresses 2021-04-12 16:48:35 +02:00
include irqchip/mips: Fix RCU violation when using irqdomain lookup on interrupt entry 2021-07-09 10:18:58 +01:00
ingenic MIPS: jz4740: Rename jz4740 folders to ingenic 2020-09-18 16:35:05 +02:00
jazz MIPS: jazz: always allow little-endian builds 2021-01-22 13:53:21 +01:00
kernel irqchip/mips: Fix RCU violation when using irqdomain lookup on interrupt entry 2021-07-09 10:18:58 +01:00
kvm ARM: 2021-05-01 10:14:08 -07:00
lantiq MIPS: lantiq: Directly include linux/of.h in xway/dma.c 2021-06-10 13:09:16 +01:00
lib MIPS: Fix kernel hang under FUNCTION_GRAPH_TRACER and PREEMPT_TRACER 2021-05-25 15:33:17 +02:00
loongson2ef - added support for Nintendo N64 2021-02-21 13:18:26 -08:00
loongson32 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
loongson64 mm: move mem_init_print_info() into mm_init() 2021-04-30 11:20:42 -07:00
math-emu
mm hugetlb: pass vma into huge_pte_alloc() and huge_pmd_share() 2021-05-05 11:27:20 -07:00
mti-malta MIPS: Remove KVM_GUEST support 2021-03-10 15:18:40 +01:00
n64 mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
net bpf: Rename BPF_XADD and prepare to encode other atomics in .imm 2021-01-14 18:34:29 -08:00
netlogic mips: netlogic: Use irq_domain_simple_ops for XLP PIC 2021-04-07 13:25:52 +01:00
pci MIPS: Add missing linux/irqdomain.h includes 2021-06-10 13:09:16 +01:00
pic32 MIPS: of: Introduce helper function to get DTB 2021-02-04 13:34:51 +01:00
pistachio driver core: lift dma_default_coherent into common code 2021-02-13 09:51:45 +01:00
power
ralink MIPS: ralink: export rt_sysc_membase for rt2880_wdt.c 2021-05-25 15:22:04 +02:00
rb532 net: korina: Add support for device tree 2021-04-19 15:58:14 -07:00
sgi-ip22 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sgi-ip27 MIPS: Add missing linux/irqdomain.h includes 2021-06-10 13:09:16 +01:00
sgi-ip30 MIPS: Add missing linux/irqdomain.h includes 2021-06-10 13:09:16 +01:00
sgi-ip32 arch: mips: update references to current linux-mips list 2021-02-23 13:24:38 +01:00
sibyte MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
sni MIPS: SNI: Fix spurious interrupts 2020-09-16 22:40:58 +02:00
tools MIPS: tools: Fix resource leak in elf-entry.c 2020-05-24 09:29:48 +02:00
txx9 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
vdso MIPS: Makefile: Replace -pg with CC_FLAGS_FTRACE 2021-04-21 13:44:35 +02:00
vr41xx MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
Kbuild MIPS: Fix "make clean" error due to recent changes 2020-05-13 13:20:22 +02:00
Kbuild.platforms mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
Kconfig mm: generalize SYS_SUPPORTS_HUGETLBFS (rename as ARCH_SUPPORTS_HUGETLBFS) 2021-05-05 11:27:25 -07:00
Kconfig.debug arch: mips: fix unmet dependency for DEBUG_INFO 2021-03-29 11:17:23 +02:00
Makefile arch: use cross_compiling to check whether it is a cross build or not 2021-05-06 01:49:13 +09:00
Makefile.postlink