Revert "rcu/nocb: Fix rcuog wake-up from offline softirq"
authorFrederic Weisbecker <frederic@kernel.org>
Tue, 31 Dec 2024 17:07:12 +0000 (18:07 +0100)
committerJoel Fernandes <joelagnelf@nvidia.com>
Fri, 16 May 2025 13:00:54 +0000 (09:00 -0400)
This reverts commit f7345ccc62a4b880cf76458db5f320725f28e400.

swake_up_one_online() has been removed because hrtimers can now assign
a proper online target to hrtimers queued from offline CPUs. Therefore
remove the related hackery.

Link: https://lore.kernel.org/all/20241231170712.149394-4-frederic@kernel.org/
Reviewed-by: Usama Arif <usamaarif642@gmail.com>
Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
kernel/rcu/tree_nocb.h

index 109bc2df1d9a5639d19b7d7f7c0600e874280bcb..1596812f7f12138dd9b8cad029d763239030af17 100644 (file)
@@ -554,19 +554,13 @@ static void __call_rcu_nocb_wake(struct rcu_data *rdp, bool was_alldone,
                        rcu_nocb_unlock(rdp);
                        wake_nocb_gp_defer(rdp, RCU_NOCB_WAKE_LAZY,
                                           TPS("WakeLazy"));
-               } else if (!irqs_disabled_flags(flags) && cpu_online(rdp->cpu)) {
+               } else if (!irqs_disabled_flags(flags)) {
                        /* ... if queue was empty ... */
                        rcu_nocb_unlock(rdp);
                        wake_nocb_gp(rdp, false);
                        trace_rcu_nocb_wake(rcu_state.name, rdp->cpu,
                                            TPS("WakeEmpty"));
                } else {
-                       /*
-                        * Don't do the wake-up upfront on fragile paths.
-                        * Also offline CPUs can't call swake_up_one_online() from
-                        * (soft-)IRQs. Rely on the final deferred wake-up from
-                        * rcutree_report_cpu_dead()
-                        */
                        rcu_nocb_unlock(rdp);
                        wake_nocb_gp_defer(rdp, RCU_NOCB_WAKE,
                                           TPS("WakeEmptyIsDeferred"));