[PATCH 1/1] arm64: Prevent offline CPU handling IRQs.

From: alvinzhan1234
Date: Wed Jul 13 2022 - 09:28:59 EST


From: Alvin Zhan <alvinzhan1234@xxxxxxxxx>

Migrate all of the IRQs on this CPU after setting it offline may still cause the IRQs to be dispatched to this CPU.
To prevent offline CPU handling IRQs, we should migrate the IRQs away from this CPU before it is powered off.

Signed-off-by: Alvin Zhan <alvinzhan1234@xxxxxxxxx>
---
arch/arm64/kernel/smp.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 62ed361a4..c4c3c5ed5 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -302,6 +302,11 @@ int __cpu_disable(void)
remove_cpu_topology(cpu);
numa_remove_cpu(cpu);

+ /*
+ * Migrate IRQs away from this CPU first.
+ */
+ irq_migrate_all_off_this_cpu();
+
/*
* Take this CPU offline. Once we clear this, we can't return,
* and we must not schedule until we're ready to give up the cpu.
@@ -309,11 +314,6 @@ int __cpu_disable(void)
set_cpu_online(cpu, false);
ipi_teardown(cpu);

- /*
- * OK - migrate IRQs away from this CPU
- */
- irq_migrate_all_off_this_cpu();
-
return 0;
}

--
2.34.1