irq: arm: perform irqentry in entry code
authorMark Rutland <mark.rutland@arm.com>
Tue, 19 Oct 2021 17:17:17 +0000 (18:17 +0100)
committerMark Rutland <mark.rutland@arm.com>
Mon, 25 Oct 2021 09:05:31 +0000 (10:05 +0100)
commita7b0872e964cf306fe26d9d49585a90486e32fdf
tree4e54d8590442543dae9c040900d8a9c9ad579055
parent2fe35f8ee726466f0898ba60c5868c6f9a1ac566
irq: arm: perform irqentry in entry code

In preparation for removing HANDLE_DOMAIN_IRQ_IRQENTRY, have arch/arm
perform all the irqentry accounting in its entry code.

For configurations with CONFIG_GENERIC_IRQ_MULTI_HANDLER, we can use
generic_handle_arch_irq(). Other than asm_do_IRQ(), all C calls to
handle_IRQ() are from irqchip handlers which will be called from
generic_handle_arch_irq(), so to avoid double accounting IRQ entry, the
entry logic is moved from handle_IRQ() into asm_do_IRQ().

For ARMv7M the entry assembly is tightly coupled with the NVIC irqchip, and
while the entry code should logically live under arch/arm/, moving the
entry logic there makes things more convoluted. So for now, place the
entry logic in the NVIC irqchip, but separated into a separate
function to make the split of responsibility clear.

For all other configurations without CONFIG_GENERIC_IRQ_MULTI_HANDLER,
IRQ entry is already handled in arch code, and requires no changes.

There should be no functional change as a result of this patch.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Tested-by: Vladimir Murzin <vladimir.murzin@arm.com> # ARMv7M
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
arch/arm/Kconfig
arch/arm/kernel/entry-armv.S
arch/arm/kernel/irq.c
drivers/irqchip/irq-nvic.c