Patch "powerpc: Offline CPU in stop_this_cpu()" has been added to the 5.13-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

    powerpc: Offline CPU in stop_this_cpu()

to the 5.13-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:
     powerpc-offline-cpu-in-stop_this_cpu.patch
and it can be found in the queue-5.13 subdirectory.

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



commit fdfa88bf933dd6af1bf2c41d74bcd88e6d433277
Author: Nicholas Piggin <npiggin@xxxxxxxxx>
Date:   Wed Jun 23 14:12:45 2021 +1000

    powerpc: Offline CPU in stop_this_cpu()
    
    [ Upstream commit bab26238bbd44d5a4687c0a64fd2c7f2755ea937 ]
    
    printk_safe_flush_on_panic() has special lock breaking code for the case
    where we panic()ed with the console lock held. It relies on panic IPI
    causing other CPUs to mark themselves offline.
    
    Do as most other architectures do.
    
    This effectively reverts commit de6e5d38417e ("powerpc: smp_send_stop do
    not offline stopped CPUs"), unfortunately it may result in some false
    positive warnings, but the alternative is more situations where we can
    crash without getting messages out.
    
    Fixes: de6e5d38417e ("powerpc: smp_send_stop do not offline stopped CPUs")
    Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20210623041245.865134-1-npiggin@xxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 6c6e4d934d86..df6b468976d5 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -619,6 +619,8 @@ static void nmi_stop_this_cpu(struct pt_regs *regs)
 	/*
 	 * IRQs are already hard disabled by the smp_handle_nmi_ipi.
 	 */
+	set_cpu_online(smp_processor_id(), false);
+
 	spin_begin();
 	while (1)
 		spin_cpu_relax();
@@ -634,6 +636,15 @@ void smp_send_stop(void)
 static void stop_this_cpu(void *dummy)
 {
 	hard_irq_disable();
+
+	/*
+	 * Offlining CPUs in stop_this_cpu can result in scheduler warnings,
+	 * (see commit de6e5d38417e), but printk_safe_flush_on_panic() wants
+	 * to know other CPUs are offline before it breaks locks to flush
+	 * printk buffers, in case we panic()ed while holding the lock.
+	 */
+	set_cpu_online(smp_processor_id(), false);
+
 	spin_begin();
 	while (1)
 		spin_cpu_relax();



[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