[PATCH] irqchip/riscv-imsic: sync-up state before CPU offline

Yong-Xuan Wang yongxuan.wang at sifive.com
Sun May 3 23:05:02 PDT 2026


The "move_prev" pointer in struct imsic_vector on the new CPU is
cleared only after the old CPU has cleared "move_next". But when
migrating all the interrupts out from an offling CPU, since the CPU
is already marked as "offlined", the IMSIC driver skip to sync-up the
interrupt vector in __imsic_remote_sync(). The "move_pre" pointer of
these interrupts can only be cleared after the old CPU backs to online.
Therefore the affinity of an interrupt that are orignally target an
offlined CPU can't be changed.

This patch force to clear the "move_pre" pointers before the CPU goes
offline.

Signed-off-by: Yong-Xuan Wang <yongxuan.wang at sifive.com>
---
 drivers/irqchip/irq-riscv-imsic-early.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/irqchip/irq-riscv-imsic-early.c b/drivers/irqchip/irq-riscv-imsic-early.c
index ba903fa689bd..a7a1852b548c 100644
--- a/drivers/irqchip/irq-riscv-imsic-early.c
+++ b/drivers/irqchip/irq-riscv-imsic-early.c
@@ -158,6 +158,8 @@ static int imsic_dying_cpu(unsigned int cpu)
 	/* Cleanup IPIs */
 	imsic_ipi_dying_cpu();
 
+	imsic_local_sync_all(false);
+
 	/* Mark per-CPU IMSIC state as offline */
 	imsic_state_offline();
 

---
base-commit: 9b3a2be84803cf18c4b4d1efc695991f0daa153c
change-id: 20260503-imsic-d70c156cb740




More information about the linux-riscv mailing list