[PATCH] riscv: Report dying CPU to RCU in IPI_CPU_STOP
From: Guo Ren
Date: Mon Jun 22 2026 - 09:45:57 EST
From: "Guo Ren (Alibaba DAMO Academy)" <guoren@xxxxxxxxxx>
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@xxxxxxxxxxxxxxx
Cc: Huacai Chen <chenhuacai@xxxxxxxxxxx>
Cc: Jonas Jelonek <jelonek.jonas@xxxxxxxxx>
Cc: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
Cc: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: Jiayuan Chen <jiayuan.chen@xxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxx>
Fixes: 91840be8f710 ("irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT")
Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@xxxxxxxxxx>
---
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