[PATCH 12/19] arm64: cpu_ops: Make 'cpu_operations' pointer global instead of per-cpu

Jinjie Ruan ruanjinjie at huawei.com
Tue Sep 15 18:12:37 PDT 2026



在 2026/9/11 20:55, Will Deacon 写道:
> On Tue, Sep 08, 2026 at 07:32:06PM +0800, Jinjie Ruan wrote:
>> 在 2026/9/8 0:40, Will Deacon 写道:
>>> diff --git a/arch/arm64/kernel/cpu_ops.c b/arch/arm64/kernel/cpu_ops.c
>>> index e133011f64b5..eacfb88a0c0c 100644
>>> --- a/arch/arm64/kernel/cpu_ops.c
>>> +++ b/arch/arm64/kernel/cpu_ops.c
>>> @@ -20,7 +20,8 @@ extern const struct cpu_operations acpi_parking_protocol_ops;
>>>  #endif
>>>  extern const struct cpu_operations cpu_psci_ops;
>>>  
>>> -static const struct cpu_operations *cpu_ops[NR_CPUS] __ro_after_init;
>>> +static const struct cpu_operations *cpu_ops __ro_after_init;
>>> +static bool boot_cpu_has_enable_method __ro_after_init;
>>>  
>>>  static const struct cpu_operations *const dt_supported_cpu_ops[] __initconst = {
>>>  	&smp_spin_table_ops,
>>> @@ -40,6 +41,9 @@ static const struct cpu_operations * __init cpu_get_ops(const char *name)
>>>  {
>>>  	const struct cpu_operations *const *ops;
>>>  
>>> +	if (!name)
>>> +		return NULL;
>>> +
>>>  	ops = acpi_disabled ? dt_supported_cpu_ops : acpi_supported_cpu_ops;
>>>  
>>>  	while (*ops) {
>>> @@ -49,6 +53,7 @@ static const struct cpu_operations * __init cpu_get_ops(const char *name)
>>>  		ops++;
>>>  	}
>>>  
>>> +	pr_warn("Unsupported enable-method: %s\n", name);
>>>  	return NULL;
>>>  }
>>>  
>>> @@ -94,25 +99,31 @@ static const char *__init cpu_read_enable_method(int cpu)
>>>  	return enable_method;
>>>  }
>>>  /*
>>> - * Read a cpu's enable method and record it in cpu_ops.
>>> + * Read a cpu's enable method and update/check cpu_ops.
>>>   */
>>>  int __init init_cpu_ops(int cpu)
>>>  {
>>>  	const char *enable_method = cpu_read_enable_method(cpu);
>>> +	const struct cpu_operations *ops = cpu_get_ops(enable_method);
>>>  
>>> -	if (!enable_method)
>>> +	if (!ops)
>>>  		return -ENODEV;
>>>  
>>> -	cpu_ops[cpu] = cpu_get_ops(enable_method);
>>> -	if (!cpu_ops[cpu]) {
>>> -		pr_warn("Unsupported enable-method: %s\n", enable_method);
>>> -		return -EOPNOTSUPP;
>>> -	}
>>> +	if (!cpu_ops)
>>> +		cpu_ops = ops;
>>> +	else if (cpu_ops != ops)
>>> +		return -EBUSY;
>>
>> Should we return the original error code of init_cpu_ops() in
>> smp_cpu_setup()?
> 
> I don't think it matters (the only caller of smp_cpu_setup() just cares
> about 0 vs !0) and I don't see a reason to change it as part of this
> series.

That's indeed the case — currently there's only one caller, and it
doesn't care what the return value is.

> 
>> Otherwise LGTM
>> Reviewed-by: Jinjie Ruan <ruanjinjie at huawei.com>
> 
> Thanks,
> 
> Will




More information about the linux-arm-kernel mailing list