Patch "rcu/nocb: Fix RT throttling hrtimer armed from offline CPU" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    rcu/nocb: Fix RT throttling hrtimer armed from offline CPU

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rcu-nocb-fix-rt-throttling-hrtimer-armed-from-offlin.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 289a2509be3730673275734804e715bda1ebe9c6
Author: Frederic Weisbecker <frederic@xxxxxxxxxx>
Date:   Wed Aug 14 00:56:40 2024 +0200

    rcu/nocb: Fix RT throttling hrtimer armed from offline CPU
    
    [ Upstream commit 9139f93209d1ffd7f489ab19dee01b7c3a1a43d2 ]
    
    After a CPU is marked offline and until it reaches its final trip to
    idle, rcuo has several opportunities to be woken up, either because
    a callback has been queued in the meantime or because
    rcutree_report_cpu_dead() has issued the final deferred NOCB wake up.
    
    If RCU-boosting is enabled, RCU kthreads are set to SCHED_FIFO policy.
    And if RT-bandwidth is enabled, the related hrtimer might be armed.
    However this then happens after hrtimers have been migrated at the
    CPUHP_AP_HRTIMERS_DYING stage, which is broken as reported by the
    following warning:
    
     Call trace:
      enqueue_hrtimer+0x7c/0xf8
      hrtimer_start_range_ns+0x2b8/0x300
      enqueue_task_rt+0x298/0x3f0
      enqueue_task+0x94/0x188
      ttwu_do_activate+0xb4/0x27c
      try_to_wake_up+0x2d8/0x79c
      wake_up_process+0x18/0x28
      __wake_nocb_gp+0x80/0x1a0
      do_nocb_deferred_wakeup_common+0x3c/0xcc
      rcu_report_dead+0x68/0x1ac
      cpuhp_report_idle_dead+0x48/0x9c
      do_idle+0x288/0x294
      cpu_startup_entry+0x34/0x3c
      secondary_start_kernel+0x138/0x158
    
    Fix this with waking up rcuo using an IPI if necessary. Since the
    existing API to deal with this situation only handles swait queue, rcuo
    is only woken up from offline CPUs if it's not already waiting on a
    grace period. In the worst case some callbacks will just wait for a
    grace period to complete before being assigned to a subsequent one.
    
    Reported-by: "Cheng-Jui Wang (王正睿)" <Cheng-Jui.Wang@xxxxxxxxxxxx>
    Fixes: 5c0930ccaad5 ("hrtimers: Push pending hrtimers away from outgoing CPU earlier")
    Signed-off-by: Frederic Weisbecker <frederic@xxxxxxxxxx>
    Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h
index 30b34f215ca35..e019f166daa61 100644
--- a/kernel/rcu/tree_nocb.h
+++ b/kernel/rcu/tree_nocb.h
@@ -220,7 +220,10 @@ static bool __wake_nocb_gp(struct rcu_data *rdp_gp,
 	raw_spin_unlock_irqrestore(&rdp_gp->nocb_gp_lock, flags);
 	if (needwake) {
 		trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, TPS("DoWake"));
-		wake_up_process(rdp_gp->nocb_gp_kthread);
+		if (cpu_is_offline(raw_smp_processor_id()))
+			swake_up_one_online(&rdp_gp->nocb_gp_wq);
+		else
+			wake_up_process(rdp_gp->nocb_gp_kthread);
 	}
 
 	return needwake;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux