[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