Thread (1 message) 1 message, 1 author, 2025-02-10

Re: [PATCH -next v5 10/22] entry: Add arch_irqentry_exit_need_resched() for arm64

From: Mark Rutland <mark.rutland@arm.com>
Date: 2025-02-10 12:05:35
Also in: lkml, xen-devel

On Fri, Dec 06, 2024 at 06:17:32PM +0800, Jinjie Ruan wrote:
ARM64 requires an additional check whether to reschedule on return
from interrupt.

Add arch_irqentry_exit_need_resched() as the default NOP
implementation and hook it up into the need_resched() condition in
raw_irqentry_exit_cond_resched().

This allows ARM64 to implement the architecture specific version for
switching over to the generic entry code.
Please fold this into the earlier changes in this area mad over patches
6 to 8.
quoted hunk
Suggested-by: Mark Rutland <mark.rutland@arm.com>
Suggested-by: Kevin Brodsky <redacted>
Suggested-by: Thomas Gleixner <redacted>
Signed-off-by: Jinjie Ruan <redacted>
---
 kernel/entry/common.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/kernel/entry/common.c b/kernel/entry/common.c
index b82032777310..4aa9656fa1b4 100644
--- a/kernel/entry/common.c
+++ b/kernel/entry/common.c
@@ -142,6 +142,20 @@ noinstr irqentry_state_t irqentry_enter(struct pt_regs *regs)
 	return ret;
 }
 
+/**
+ * arch_irqentry_exit_need_resched - Architecture specific need resched function
+ *
+ * Invoked from raw_irqentry_exit_cond_resched() to check if need resched.
+ * Defaults return true.
+ *
+ * The main purpose is to permit arch to skip preempt a task from an IRQ.
+ */
+static inline bool arch_irqentry_exit_need_resched(void);
+
+#ifndef arch_irqentry_exit_need_resched
+static inline bool arch_irqentry_exit_need_resched(void) { return true; }
+#endif
+
 void raw_irqentry_exit_cond_resched(void)
 {
 	if (!preempt_count()) {
@@ -149,7 +163,7 @@ void raw_irqentry_exit_cond_resched(void)
 		rcu_irq_exit_check_preempt();
 		if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
 			WARN_ON_ONCE(!on_thread_stack());
-		if (need_resched())
+		if (need_resched() && arch_irqentry_exit_need_resched())
 			preempt_schedule_irq();
 	}
 }
-- 
2.34.1
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help