[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH -next v5 10/22] entry: Add arch_irqentry_exit_need_resched() for arm64
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. > > Suggested-by: Mark Rutland <mark.rutland@xxxxxxx> > Suggested-by: Kevin Brodsky <kevin.brodsky@xxxxxxx> > Suggested-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Signed-off-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx> > --- > 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 >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |