[PATCHv2 3/5] kernel/irq: make irq_{enter, exit}() in handle_domain_irq() arch optional
Pingfan Liu
kernelfans at gmail.com
Fri Sep 24 06:28:35 PDT 2021
handle_domain_irq() contains two major parts:
-1. irq_enter()/irq_exit(), which serves as hooks for rcu and trace etc.
-2. irq mapping and dispatching
After the introduction of irqentry_enter()/irqentry_exit() and arch
specific counterpart (e.g. arm64), roughly speaking, rcu_irq_enter() has
already been called. Hence here comes requirement to move
irq_enter/irq_exit out of handle_domain_irq(). And arches should handle
about irq_enter_rcu()/irq_exit_rcu() by themself.
Since there is still arches, which does not adopt irqentry_enter(), let
irq_enter()/irq_exit() arch optional in handle_domain_irq().
Signed-off-by: Pingfan Liu <kernelfans at gmail.com>
Cc: Thomas Gleixner <tglx at linutronix.de>
Cc: Catalin Marinas <catalin.marinas at arm.com>
Cc: Will Deacon <will at kernel.org>
Cc: Mark Rutland <mark.rutland at arm.com>
Cc: Marc Zyngier <maz at kernel.org>
Cc: Joey Gouly <joey.gouly at arm.com>
Cc: Sami Tolvanen <samitolvanen at google.com>
Cc: Julien Thierry <julien.thierry at arm.com>
Cc: Yuichi Ito <ito-yuichi at fujitsu.com>
Cc: linux-arm-kernel at lists.infradead.org
To: linux-kernel at vger.kernel.org
---
kernel/irq/Kconfig | 3 +++
kernel/irq/irqdesc.c | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig
index fbc54c2a7f23..defa1db2d664 100644
--- a/kernel/irq/Kconfig
+++ b/kernel/irq/Kconfig
@@ -100,6 +100,9 @@ config IRQ_MSI_IOMMU
config HANDLE_DOMAIN_IRQ
bool
+config HAVE_ARCH_IRQENTRY
+ bool
+
config IRQ_TIMINGS
bool
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 4e3c29bb603c..fd5dd9d278b5 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -693,7 +693,9 @@ int handle_domain_irq(struct irq_domain *domain,
struct irq_desc *desc;
int ret = 0;
+#ifndef CONFIG_HAVE_ARCH_IRQENTRY
irq_enter();
+#endif
/* The irqdomain code provides boundary checks */
desc = irq_resolve_mapping(domain, hwirq);
@@ -702,7 +704,9 @@ int handle_domain_irq(struct irq_domain *domain,
else
ret = -EINVAL;
+#ifndef CONFIG_HAVE_ARCH_IRQENTRY
irq_exit();
+#endif
set_irq_regs(old_regs);
return ret;
}
--
2.31.1
More information about the linux-arm-kernel
mailing list