[PATCH 01/19] cpu/hotplug: Clean up cmpxchg() logic in cpuhp_can_boot_ap()
Will Deacon
will at kernel.org
Mon Sep 7 09:40:04 PDT 2026
cpuhp_can_boot_ap() uses atomic_try_cmpxchg() to transition the sync
state of the incoming CPU to SYNC_STATE_KICKED. However, this is
unnecessary if the state is SYNC_STATE_DEAD, since there will not be any
concurrent state modifications, and also if the state is already set to
SYNC_STATE_KICKED.
Restrict the use of cmpxchg() to the case where the existing state is
SYNC_STATE_ALIVE.
Signed-off-by: Will Deacon <will at kernel.org>
---
kernel/cpu.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/kernel/cpu.c b/kernel/cpu.c
index b3c8553d7bd6..198c929c452a 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -408,22 +408,22 @@ static bool cpuhp_can_boot_ap(unsigned int cpu)
switch (sync) {
case SYNC_STATE_DEAD:
/* CPU is properly dead */
+ atomic_set(st, SYNC_STATE_KICKED);
break;
case SYNC_STATE_KICKED:
/* CPU did not come up in previous attempt */
break;
case SYNC_STATE_ALIVE:
/* CPU is stuck cpuhp_ap_sync_alive(). */
+ if (!atomic_try_cmpxchg_relaxed(st, &sync, SYNC_STATE_KICKED))
+ goto again;
break;
default:
/* CPU failed to report online or dead and is in limbo state. */
return false;
}
- /* Prepare for booting */
- if (!atomic_try_cmpxchg(st, &sync, SYNC_STATE_KICKED))
- goto again;
-
+ /* Continue with booting */
return true;
}
--
2.55.0.979.g7e5102b832-goog
More information about the linux-arm-kernel
mailing list