[PATCH] riscv: Report dying CPU to RCU in IPI_CPU_STOP
Guo Ren
guoren at kernel.org
Mon Jun 22 06:40:18 PDT 2026
From: "Guo Ren (Alibaba DAMO Academy)" <guoren at kernel.org>
This is a port of MIPS commit 9f3f3bdc6d9dac1 ("MIPS: smp: report
dying CPU to RCU in stop_this_cpu()") inspired by the Loongarch
mailing thread.
The smp_send_stop() parks all secondary CPUs in IPI_CPU_STOP, which
marks the CPU offline for the scheduler via set_cpu_online(false),
but never informs RCU, so RCU keeps expecting a quiescent state
from CPUs that are now spinning forever with interrupts disabled.
Please read the MIPS commit mentioned before for details.
Cc: stable at vger.kernel.org
Cc: Huacai Chen <chenhuacai at loongson.cn>
Cc: Jonas Jelonek <jelonek.jonas at gmail.com>
Cc: Thomas Bogendoerfer <tsbogend at alpha.franken.de>
Cc: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
Cc: Steven Rostedt <rostedt at goodmis.org>
Cc: Jiayuan Chen <jiayuan.chen at linux.dev>
Cc: Thomas Gleixner <tglx at kernel.org>
Fixes: 91840be8f710 ("irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT")
Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren at kernel.org>
---
arch/riscv/kernel/smp.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c
index fa66f9c97d74..0a73b36be825 100644
--- a/arch/riscv/kernel/smp.c
+++ b/arch/riscv/kernel/smp.c
@@ -82,6 +82,7 @@ int riscv_hartid_to_cpuid(unsigned long hartid)
static void ipi_stop(void)
{
set_cpu_online(smp_processor_id(), false);
+ rcutree_report_cpu_dead();
while (1)
wait_for_interrupt();
}
--
2.43.0
More information about the linux-riscv
mailing list