[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210924132837.45994-4-kernelfans@gmail.com>
Date: Fri, 24 Sep 2021 21:28:35 +0800
From: Pingfan Liu <kernelfans@...il.com>
To: linux-kernel@...r.kernel.org
Cc: Pingfan Liu <kernelfans@...il.com>,
Thomas Gleixner <tglx@...utronix.de>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Marc Zyngier <maz@...nel.org>, Joey Gouly <joey.gouly@....com>,
Sami Tolvanen <samitolvanen@...gle.com>,
Julien Thierry <julien.thierry@....com>,
Yuichi Ito <ito-yuichi@...itsu.com>,
linux-arm-kernel@...ts.infradead.org
Subject: [PATCHv2 3/5] kernel/irq: make irq_{enter,exit}() in handle_domain_irq() arch optional
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@...il.com>
Cc: Thomas Gleixner <tglx@...utronix.de>
Cc: Catalin Marinas <catalin.marinas@....com>
Cc: Will Deacon <will@...nel.org>
Cc: Mark Rutland <mark.rutland@....com>
Cc: Marc Zyngier <maz@...nel.org>
Cc: Joey Gouly <joey.gouly@....com>
Cc: Sami Tolvanen <samitolvanen@...gle.com>
Cc: Julien Thierry <julien.thierry@....com>
Cc: Yuichi Ito <ito-yuichi@...itsu.com>
Cc: linux-arm-kernel@...ts.infradead.org
To: linux-kernel@...r.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
Powered by blists - more mailing lists