On 2021-02-19 10:33:36 [-0800], Paul E. McKenney wrote: > For definiteness, here is the first part of the change, posted earlier. > The commit log needs to be updated. I will post the change that keeps > the tick going as a reply to this email. … > diff --git a/kernel/softirq.c b/kernel/softirq.c > index 9d71046..ba78e63 100644 > --- a/kernel/softirq.c > +++ b/kernel/softirq.c > @@ -209,7 +209,7 @@ static inline void invoke_softirq(void) > if (ksoftirqd_running(local_softirq_pending())) > return; > > - if (!force_irqthreads) { > + if (!force_irqthreads || !__this_cpu_read(ksoftirqd)) { > #ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK > /* > * We can safely execute softirq on the current stack if > @@ -358,8 +358,8 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) > > pending = local_softirq_pending(); > if (pending) { > - if (time_before(jiffies, end) && !need_resched() && > - --max_restart) > + if (!__this_cpu_read(ksoftirqd) || > + (time_before(jiffies, end) && !need_resched() && --max_restart)) > goto restart; This is hunk shouldn't be needed. The reason for it is probably that the following wakeup_softirqd() would avoid further invoke_softirq() performing the actual softirq work. It would leave early due to ksoftirqd_running(). Unless I'm wrong, any raise_softirq() invocation outside of an interrupt would do the same. I would like PeterZ / tglx to comment on this one. Basically I'm not sure if it is okay to expect softirqs beeing served and waited on that early in the boot. > wakeup_softirqd(); Sebastian