]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop queue-6.1/rcu-nocb-fix-rcuog-wake-up-from-offline-softirq.patch
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Oct 2024 13:12:04 +0000 (15:12 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Oct 2024 13:12:04 +0000 (15:12 +0200)
didn't apply

queue-6.1/rcu-nocb-fix-rcuog-wake-up-from-offline-softirq.patch [deleted file]
queue-6.1/series

diff --git a/queue-6.1/rcu-nocb-fix-rcuog-wake-up-from-offline-softirq.patch b/queue-6.1/rcu-nocb-fix-rcuog-wake-up-from-offline-softirq.patch
deleted file mode 100644 (file)
index 625110e..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-From f7345ccc62a4b880cf76458db5f320725f28e400 Mon Sep 17 00:00:00 2001
-From: Frederic Weisbecker <frederic@kernel.org>
-Date: Thu, 10 Oct 2024 18:36:09 +0200
-Subject: rcu/nocb: Fix rcuog wake-up from offline softirq
-
-From: Frederic Weisbecker <frederic@kernel.org>
-
-commit f7345ccc62a4b880cf76458db5f320725f28e400 upstream.
-
-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 a softirq. 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 a softirq 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>
-
-Fix this with forcing deferred rcuog wake up through the NOCB timer when
-the CPU is offline. The actual wake up will happen from
-rcutree_report_cpu_dead().
-
-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")
-Reviewed-by: "Joel Fernandes (Google)" <joel@joelfernandes.org>
-Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
-Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- kernel/rcu/tree_nocb.h | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h
-index 97b99cd06923..16865475120b 100644
---- a/kernel/rcu/tree_nocb.h
-+++ b/kernel/rcu/tree_nocb.h
-@@ -554,13 +554,19 @@ 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)) {
-+              } else if (!irqs_disabled_flags(flags) && cpu_online(rdp->cpu)) {
-                       /* ... 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"));
--- 
-2.47.0
-
index 66a458d17a70ec5ef7fa85024b0354d7a3d018d4..dbbfb90a343aac44ad1e2e53d37cd87532e2d025 100644 (file)
@@ -795,4 +795,3 @@ secretmem-disable-memfd_secret-if-arch-cannot-set-direct-map.patch
 net-ethernet-cortina-restore-tso-support.patch
 perf-lock-don-t-pass-an-err_ptr-directly-to-perf_session__delete.patch
 block-bfq-fix-uaf-for-accessing-waker_bfqq-after-splitting.patch
-rcu-nocb-fix-rcuog-wake-up-from-offline-softirq.patch