[PATCH 01/19] cpu/hotplug: Clean up cmpxchg() logic in cpuhp_can_boot_ap()
Jinjie Ruan
ruanjinjie at huawei.com
Mon Sep 7 19:55:55 PDT 2026
在 2026/9/8 0:40, Will Deacon 写道:
> 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 */
Reviewed-by: Jinjie Ruan <ruanjinjie at huawei.com>
> return true;
> }
>
More information about the linux-arm-kernel
mailing list