* [PATCH rcu 0/2] No-CB changes for v6.14 @ 2024-12-12 18:42 Paul E. McKenney 2024-12-12 18:42 ` [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine Paul E. McKenney 2024-12-12 18:42 ` [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq Paul E. McKenney 0 siblings, 2 replies; 8+ messages in thread From: Paul E. McKenney @ 2024-12-12 18:42 UTC (permalink / raw) To: rcu; +Cc: linux-kernel, kernel-team, rostedt Hello! This series contains NOCB updates: 1. Use switch/case on NOCB timer state machine, courtesy of Frederic Weisbecker. 2. Fix rcuog wake-up from offline softirq, courtesy of Frederic Weisbecker. Thanx, Paul ------------------------------------------------------------------------ b/kernel/rcu/tree.h | 1 + b/kernel/rcu/tree_nocb.h | 33 +++++++++++++++++++++++---------- kernel/rcu/tree_nocb.h | 14 ++++++++++++-- 3 files changed, 36 insertions(+), 12 deletions(-) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine 2024-12-12 18:42 [PATCH rcu 0/2] No-CB changes for v6.14 Paul E. McKenney @ 2024-12-12 18:42 ` Paul E. McKenney 2024-12-13 23:08 ` Frederic Weisbecker 2024-12-12 18:42 ` [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq Paul E. McKenney 1 sibling, 1 reply; 8+ messages in thread From: Paul E. McKenney @ 2024-12-12 18:42 UTC (permalink / raw) To: rcu Cc: linux-kernel, kernel-team, rostedt, Frederic Weisbecker, Paul E . McKenney From: Frederic Weisbecker <frederic@kernel.org> It's more convenient to benefit from the fallthrough feature of switch / case to handle the timer state machine. Also a new state is about to be added that will take advantage of it. No intended functional change. Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> --- kernel/rcu/tree_nocb.h | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 2605dd234a13c..0923d60c5a338 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -271,22 +271,35 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype, raw_spin_lock_irqsave(&rdp_gp->nocb_gp_lock, flags); - /* - * Bypass wakeup overrides previous deferments. In case of - * callback storms, no need to wake up too early. - */ - if (waketype == RCU_NOCB_WAKE_LAZY && - rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { - mod_timer(&rdp_gp->nocb_timer, jiffies + rcu_get_jiffies_lazy_flush()); - WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); - } else if (waketype == RCU_NOCB_WAKE_BYPASS) { + switch (waketype) { + case RCU_NOCB_WAKE_BYPASS: + /* + * Bypass wakeup overrides previous deferments. In case of + * callback storms, no need to wake up too early. + */ mod_timer(&rdp_gp->nocb_timer, jiffies + 2); WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); - } else { + break; + case RCU_NOCB_WAKE_LAZY: + if (rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { + mod_timer(&rdp_gp->nocb_timer, jiffies + rcu_get_jiffies_lazy_flush()); + WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); + } + /* + * If the timer is already armed, a non-lazy enqueue may have happened + * in-between. Don't delay it and fall-through. + */ + break; + case RCU_NOCB_WAKE: + fallthrough; + case RCU_NOCB_WAKE_FORCE: if (rdp_gp->nocb_defer_wakeup < RCU_NOCB_WAKE) mod_timer(&rdp_gp->nocb_timer, jiffies + 1); if (rdp_gp->nocb_defer_wakeup < waketype) WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); + break; + default: + WARN_ON_ONCE(1); } raw_spin_unlock_irqrestore(&rdp_gp->nocb_gp_lock, flags); -- 2.40.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine 2024-12-12 18:42 ` [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine Paul E. McKenney @ 2024-12-13 23:08 ` Frederic Weisbecker 2024-12-13 23:29 ` Paul E. McKenney 0 siblings, 1 reply; 8+ messages in thread From: Frederic Weisbecker @ 2024-12-13 23:08 UTC (permalink / raw) To: Paul E. McKenney; +Cc: rcu, linux-kernel, kernel-team, rostedt Le Thu, Dec 12, 2024 at 10:42:13AM -0800, Paul E. McKenney a écrit : > From: Frederic Weisbecker <frederic@kernel.org> > > It's more convenient to benefit from the fallthrough feature of > switch / case to handle the timer state machine. Also a new state is > about to be added that will take advantage of it. > > No intended functional change. > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Please drop this one too. It introduced a subtle (yet desired) behaviour change as Boqun noted. I'll resend a better version. Thanks! > --- > kernel/rcu/tree_nocb.h | 33 +++++++++++++++++++++++---------- > 1 file changed, 23 insertions(+), 10 deletions(-) > > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > index 2605dd234a13c..0923d60c5a338 100644 > --- a/kernel/rcu/tree_nocb.h > +++ b/kernel/rcu/tree_nocb.h > @@ -271,22 +271,35 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype, > > raw_spin_lock_irqsave(&rdp_gp->nocb_gp_lock, flags); > > - /* > - * Bypass wakeup overrides previous deferments. In case of > - * callback storms, no need to wake up too early. > - */ > - if (waketype == RCU_NOCB_WAKE_LAZY && > - rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { > - mod_timer(&rdp_gp->nocb_timer, jiffies + rcu_get_jiffies_lazy_flush()); > - WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > - } else if (waketype == RCU_NOCB_WAKE_BYPASS) { > + switch (waketype) { > + case RCU_NOCB_WAKE_BYPASS: > + /* > + * Bypass wakeup overrides previous deferments. In case of > + * callback storms, no need to wake up too early. > + */ > mod_timer(&rdp_gp->nocb_timer, jiffies + 2); > WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > - } else { > + break; > + case RCU_NOCB_WAKE_LAZY: > + if (rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { > + mod_timer(&rdp_gp->nocb_timer, jiffies + rcu_get_jiffies_lazy_flush()); > + WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > + } > + /* > + * If the timer is already armed, a non-lazy enqueue may have happened > + * in-between. Don't delay it and fall-through. > + */ > + break; > + case RCU_NOCB_WAKE: > + fallthrough; > + case RCU_NOCB_WAKE_FORCE: > if (rdp_gp->nocb_defer_wakeup < RCU_NOCB_WAKE) > mod_timer(&rdp_gp->nocb_timer, jiffies + 1); > if (rdp_gp->nocb_defer_wakeup < waketype) > WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > + break; > + default: > + WARN_ON_ONCE(1); > } > > raw_spin_unlock_irqrestore(&rdp_gp->nocb_gp_lock, flags); > -- > 2.40.1 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine 2024-12-13 23:08 ` Frederic Weisbecker @ 2024-12-13 23:29 ` Paul E. McKenney 2024-12-14 16:20 ` Uladzislau Rezki 0 siblings, 1 reply; 8+ messages in thread From: Paul E. McKenney @ 2024-12-13 23:29 UTC (permalink / raw) To: Frederic Weisbecker; +Cc: rcu, linux-kernel, kernel-team, rostedt, urezki On Sat, Dec 14, 2024 at 12:08:42AM +0100, Frederic Weisbecker wrote: > Le Thu, Dec 12, 2024 at 10:42:13AM -0800, Paul E. McKenney a écrit : > > From: Frederic Weisbecker <frederic@kernel.org> > > > > It's more convenient to benefit from the fallthrough feature of > > switch / case to handle the timer state machine. Also a new state is > > about to be added that will take advantage of it. > > > > No intended functional change. > > > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > > Please drop this one too. It introduced a subtle (yet desired) behaviour > change as Boqun noted. I'll resend a better version. I will drop both on my next rebase. Uladzislau, over to you! Thanx, Paul > Thanks! > > > --- > > kernel/rcu/tree_nocb.h | 33 +++++++++++++++++++++++---------- > > 1 file changed, 23 insertions(+), 10 deletions(-) > > > > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > > index 2605dd234a13c..0923d60c5a338 100644 > > --- a/kernel/rcu/tree_nocb.h > > +++ b/kernel/rcu/tree_nocb.h > > @@ -271,22 +271,35 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype, > > > > raw_spin_lock_irqsave(&rdp_gp->nocb_gp_lock, flags); > > > > - /* > > - * Bypass wakeup overrides previous deferments. In case of > > - * callback storms, no need to wake up too early. > > - */ > > - if (waketype == RCU_NOCB_WAKE_LAZY && > > - rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { > > - mod_timer(&rdp_gp->nocb_timer, jiffies + rcu_get_jiffies_lazy_flush()); > > - WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > > - } else if (waketype == RCU_NOCB_WAKE_BYPASS) { > > + switch (waketype) { > > + case RCU_NOCB_WAKE_BYPASS: > > + /* > > + * Bypass wakeup overrides previous deferments. In case of > > + * callback storms, no need to wake up too early. > > + */ > > mod_timer(&rdp_gp->nocb_timer, jiffies + 2); > > WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > > - } else { > > + break; > > + case RCU_NOCB_WAKE_LAZY: > > + if (rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { > > + mod_timer(&rdp_gp->nocb_timer, jiffies + rcu_get_jiffies_lazy_flush()); > > + WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > > + } > > + /* > > + * If the timer is already armed, a non-lazy enqueue may have happened > > + * in-between. Don't delay it and fall-through. > > + */ > > + break; > > + case RCU_NOCB_WAKE: > > + fallthrough; > > + case RCU_NOCB_WAKE_FORCE: > > if (rdp_gp->nocb_defer_wakeup < RCU_NOCB_WAKE) > > mod_timer(&rdp_gp->nocb_timer, jiffies + 1); > > if (rdp_gp->nocb_defer_wakeup < waketype) > > WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); > > + break; > > + default: > > + WARN_ON_ONCE(1); > > } > > > > raw_spin_unlock_irqrestore(&rdp_gp->nocb_gp_lock, flags); > > -- > > 2.40.1 > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine 2024-12-13 23:29 ` Paul E. McKenney @ 2024-12-14 16:20 ` Uladzislau Rezki 0 siblings, 0 replies; 8+ messages in thread From: Uladzislau Rezki @ 2024-12-14 16:20 UTC (permalink / raw) To: Paul E. McKenney, Frederic Weisbecker Cc: Frederic Weisbecker, rcu, linux-kernel, kernel-team, rostedt, urezki On Fri, Dec 13, 2024 at 03:29:16PM -0800, Paul E. McKenney wrote: > On Sat, Dec 14, 2024 at 12:08:42AM +0100, Frederic Weisbecker wrote: > > Le Thu, Dec 12, 2024 at 10:42:13AM -0800, Paul E. McKenney a écrit : > > > From: Frederic Weisbecker <frederic@kernel.org> > > > > > > It's more convenient to benefit from the fallthrough feature of > > > switch / case to handle the timer state machine. Also a new state is > > > about to be added that will take advantage of it. > > > > > > No intended functional change. > > > > > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > > > > Please drop this one too. It introduced a subtle (yet desired) behaviour > > change as Boqun noted. I'll resend a better version. > > I will drop both on my next rebase. Uladzislau, over to you! > Thank you. Dropped both. -- Uladzislau Rezki ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq 2024-12-12 18:42 [PATCH rcu 0/2] No-CB changes for v6.14 Paul E. McKenney 2024-12-12 18:42 ` [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine Paul E. McKenney @ 2024-12-12 18:42 ` Paul E. McKenney 2024-12-13 23:07 ` Frederic Weisbecker 1 sibling, 1 reply; 8+ messages in thread From: Paul E. McKenney @ 2024-12-12 18:42 UTC (permalink / raw) To: rcu Cc: linux-kernel, kernel-team, rostedt, Frederic Weisbecker, kernel test robot, Paul E . McKenney From: Frederic Weisbecker <frederic@kernel.org> After a CPU has set itself offline and before it eventually calls rcutree_report_cpu_dead(), there are still opportunities for callbacks to be enqueued, for example from an IRQ. When that happens on NOCB, the rcuog wake-up is deferred through an IPI to an online CPU in order not to call into the scheduler and risk arming the RT-bandwidth after hrtimers have been migrated out and disabled. But performing a synchronized IPI from an IRQ is buggy as reported in the following scenario: WARNING: CPU: 1 PID: 26 at kernel/smp.c:633 smp_call_function_single Modules linked in: rcutorture torture CPU: 1 UID: 0 PID: 26 Comm: migration/1 Not tainted 6.11.0-rc1-00012-g9139f93209d1 #1 Stopper: multi_cpu_stop+0x0/0x320 <- __stop_cpus+0xd0/0x120 RIP: 0010:smp_call_function_single <IRQ> swake_up_one_online __call_rcu_nocb_wake __call_rcu_common ? rcu_torture_one_read call_timer_fn __run_timers run_timer_softirq handle_softirqs irq_exit_rcu ? tick_handle_periodic sysvec_apic_timer_interrupt </IRQ> The periodic tick must be shutdown when the CPU is offline, just like is done for oneshot tick. This must be fixed but this is not enough: softirqs can happen on any hardirq tail and reproduce the above scenario. Fix this with introducing a special deferred rcuog wake up mode when the CPU is offline. This deferred wake up doesn't arm any timer and simply wait for rcu_report_cpu_dead() to be called in order to flush any pending rcuog wake up. Reported-by: kernel test robot <oliver.sang@intel.com> Closes: https://lore.kernel.org/oe-lkp/202409231644.4c55582d-lkp@intel.com Fixes: 9139f93209d1 ("rcu/nocb: Fix RT throttling hrtimer armed from offline CPU") Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> --- kernel/rcu/tree.h | 1 + kernel/rcu/tree_nocb.h | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index a9a811d9d7a37..7ed060edd12b1 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -290,6 +290,7 @@ struct rcu_data { #define RCU_NOCB_WAKE_LAZY 2 #define RCU_NOCB_WAKE 3 #define RCU_NOCB_WAKE_FORCE 4 +#define RCU_NOCB_WAKE_OFFLINE 5 #define RCU_JIFFIES_TILL_FORCE_QS (1 + (HZ > 250) + (HZ > 500)) /* For jiffies_till_first_fqs and */ diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 0923d60c5a338..78841346e1c13 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -295,6 +295,8 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype, case RCU_NOCB_WAKE_FORCE: if (rdp_gp->nocb_defer_wakeup < RCU_NOCB_WAKE) mod_timer(&rdp_gp->nocb_timer, jiffies + 1); + fallthrough; + case RCU_NOCB_WAKE_OFFLINE: if (rdp_gp->nocb_defer_wakeup < waketype) WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); break; @@ -562,8 +564,16 @@ static void __call_rcu_nocb_wake(struct rcu_data *rdp, bool was_alldone, lazy_len = READ_ONCE(rdp->lazy_len); if (was_alldone) { rdp->qlen_last_fqs_check = len; - // Only lazy CBs in bypass list - if (lazy_len && bypass_len == lazy_len) { + if (cpu_is_offline(rdp->cpu)) { + /* + * Offline CPUs can't call swake_up_one_online() from IRQs. Rely + * on the final deferred wake-up rcutree_report_cpu_dead() + */ + rcu_nocb_unlock(rdp); + wake_nocb_gp_defer(rdp, RCU_NOCB_WAKE_OFFLINE, + TPS("WakeEmptyIsDeferredOffline")); + } else if (lazy_len && bypass_len == lazy_len) { + // Only lazy CBs in bypass list rcu_nocb_unlock(rdp); wake_nocb_gp_defer(rdp, RCU_NOCB_WAKE_LAZY, TPS("WakeLazy")); -- 2.40.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq 2024-12-12 18:42 ` [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq Paul E. McKenney @ 2024-12-13 23:07 ` Frederic Weisbecker 2024-12-14 16:16 ` Uladzislau Rezki 0 siblings, 1 reply; 8+ messages in thread From: Frederic Weisbecker @ 2024-12-13 23:07 UTC (permalink / raw) To: Paul E. McKenney Cc: rcu, linux-kernel, kernel-team, rostedt, kernel test robot Le Thu, Dec 12, 2024 at 10:42:14AM -0800, Paul E. McKenney a écrit : > From: Frederic Weisbecker <frederic@kernel.org> > > After a CPU has set itself offline and before it eventually calls > rcutree_report_cpu_dead(), there are still opportunities for callbacks > to be enqueued, for example from an IRQ. When that happens on NOCB, the > rcuog wake-up is deferred through an IPI to an online CPU in order not > to call into the scheduler and risk arming the RT-bandwidth after > hrtimers have been migrated out and disabled. > > But performing a synchronized IPI from an IRQ is buggy as reported in > the following scenario: > > WARNING: CPU: 1 PID: 26 at kernel/smp.c:633 smp_call_function_single > Modules linked in: rcutorture torture > CPU: 1 UID: 0 PID: 26 Comm: migration/1 Not tainted 6.11.0-rc1-00012-g9139f93209d1 #1 > Stopper: multi_cpu_stop+0x0/0x320 <- __stop_cpus+0xd0/0x120 > RIP: 0010:smp_call_function_single > <IRQ> > swake_up_one_online > __call_rcu_nocb_wake > __call_rcu_common > ? rcu_torture_one_read > call_timer_fn > __run_timers > run_timer_softirq > handle_softirqs > irq_exit_rcu > ? tick_handle_periodic > sysvec_apic_timer_interrupt > </IRQ> > > The periodic tick must be shutdown when the CPU is offline, just like is > done for oneshot tick. This must be fixed but this is not enough: > softirqs can happen on any hardirq tail and reproduce the above scenario. > > Fix this with introducing a special deferred rcuog wake up mode when the > CPU is offline. This deferred wake up doesn't arm any timer and simply > wait for rcu_report_cpu_dead() to be called in order to flush any > pending rcuog wake up. > > Reported-by: kernel test robot <oliver.sang@intel.com> > Closes: https://lore.kernel.org/oe-lkp/202409231644.4c55582d-lkp@intel.com > Fixes: 9139f93209d1 ("rcu/nocb: Fix RT throttling hrtimer armed from offline CPU") > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> You can drop this patch, it has been replaced with another version upstream. Thanks! ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq 2024-12-13 23:07 ` Frederic Weisbecker @ 2024-12-14 16:16 ` Uladzislau Rezki 0 siblings, 0 replies; 8+ messages in thread From: Uladzislau Rezki @ 2024-12-14 16:16 UTC (permalink / raw) To: Frederic Weisbecker Cc: Paul E. McKenney, rcu, linux-kernel, kernel-team, rostedt, kernel test robot On Sat, Dec 14, 2024 at 12:07:25AM +0100, Frederic Weisbecker wrote: > Le Thu, Dec 12, 2024 at 10:42:14AM -0800, Paul E. McKenney a écrit : > > From: Frederic Weisbecker <frederic@kernel.org> > > > > After a CPU has set itself offline and before it eventually calls > > rcutree_report_cpu_dead(), there are still opportunities for callbacks > > to be enqueued, for example from an IRQ. When that happens on NOCB, the > > rcuog wake-up is deferred through an IPI to an online CPU in order not > > to call into the scheduler and risk arming the RT-bandwidth after > > hrtimers have been migrated out and disabled. > > > > But performing a synchronized IPI from an IRQ is buggy as reported in > > the following scenario: > > > > WARNING: CPU: 1 PID: 26 at kernel/smp.c:633 smp_call_function_single > > Modules linked in: rcutorture torture > > CPU: 1 UID: 0 PID: 26 Comm: migration/1 Not tainted 6.11.0-rc1-00012-g9139f93209d1 #1 > > Stopper: multi_cpu_stop+0x0/0x320 <- __stop_cpus+0xd0/0x120 > > RIP: 0010:smp_call_function_single > > <IRQ> > > swake_up_one_online > > __call_rcu_nocb_wake > > __call_rcu_common > > ? rcu_torture_one_read > > call_timer_fn > > __run_timers > > run_timer_softirq > > handle_softirqs > > irq_exit_rcu > > ? tick_handle_periodic > > sysvec_apic_timer_interrupt > > </IRQ> > > > > The periodic tick must be shutdown when the CPU is offline, just like is > > done for oneshot tick. This must be fixed but this is not enough: > > softirqs can happen on any hardirq tail and reproduce the above scenario. > > > > Fix this with introducing a special deferred rcuog wake up mode when the > > CPU is offline. This deferred wake up doesn't arm any timer and simply > > wait for rcu_report_cpu_dead() to be called in order to flush any > > pending rcuog wake up. > > > > Reported-by: kernel test robot <oliver.sang@intel.com> > > Closes: https://lore.kernel.org/oe-lkp/202409231644.4c55582d-lkp@intel.com > > Fixes: 9139f93209d1 ("rcu/nocb: Fix RT throttling hrtimer armed from offline CPU") > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > > You can drop this patch, it has been replaced with another version upstream. > Dropped. Thank you! -- Uladzislau Rezki ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-12-14 16:20 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-12-12 18:42 [PATCH rcu 0/2] No-CB changes for v6.14 Paul E. McKenney 2024-12-12 18:42 ` [PATCH rcu 1/2] rcu/nocb: Use switch/case on NOCB timer state machine Paul E. McKenney 2024-12-13 23:08 ` Frederic Weisbecker 2024-12-13 23:29 ` Paul E. McKenney 2024-12-14 16:20 ` Uladzislau Rezki 2024-12-12 18:42 ` [PATCH rcu 2/2] rcu/nocb: Fix rcuog wake-up from offline softirq Paul E. McKenney 2024-12-13 23:07 ` Frederic Weisbecker 2024-12-14 16:16 ` Uladzislau Rezki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®