|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3] xen/arm: Set correct per-cpu cpu_core_mask
Hi Henry.
On 20/05/2024 04:57, Henry Wang wrote:
> Hi All,
>
> Gentle ping since it has been a couple of months, any comments on this
> updated patch? Thanks!
Sorry for the late reply.
>
> Kind regards,
> Henry
>
> On 3/21/2024 11:57 AM, Henry Wang wrote:
>> In the common sysctl command XEN_SYSCTL_physinfo, the value of
>> cores_per_socket is calculated based on the cpu_core_mask of CPU0.
>> Currently on Arm this is a fixed value 1 (can be checked via xl info),
>> which is not correct. This is because during the Arm CPU online
>> process at boot time, setup_cpu_sibling_map() only sets the per-cpu
>> cpu_core_mask for itself.
>>
>> cores_per_socket refers to the number of cores that belong to the same
>> socket (NUMA node). Currently Xen on Arm does not support physical
>> CPU hotplug and NUMA, also we assume there is no multithread. Therefore
>> cores_per_socket means all possible CPUs detected from the device
>> tree. Setting the per-cpu cpu_core_mask in setup_cpu_sibling_map()
>> accordingly. Modify the in-code comment which seems to be outdated. Add
>> a warning to users if Xen is running on processors with multithread
>> support.
>>
>> Signed-off-by: Henry Wang <Henry.Wang@xxxxxxx>
>> Signed-off-by: Henry Wang <xin.wang2@xxxxxxx>
Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
>> ---
>> v3:
>> - Use cpumask_copy() to set cpu_core_mask and drop the unnecessary
>> cpumask_set_cpu(cpu, per_cpu(cpu_core_mask, cpu)).
>> - In-code comment adjustments.
>> - Add a warning for multithread.
>> v2:
>> - Do not do the multithread check.
>> ---
>> xen/arch/arm/smpboot.c | 18 +++++++++++++++---
>> 1 file changed, 15 insertions(+), 3 deletions(-)
>>
>> diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
>> index a84e706d77..b6268be27a 100644
>> --- a/xen/arch/arm/smpboot.c
>> +++ b/xen/arch/arm/smpboot.c
>> @@ -66,7 +66,11 @@ static bool cpu_is_dead;
>>
>> /* ID of the PCPU we're running on */
>> DEFINE_PER_CPU(unsigned int, cpu_id);
>> -/* XXX these seem awfully x86ish... */
>> +/*
>> + * Although multithread is part of the Arm spec, there are not many
>> + * processors support multithread and current Xen on Arm assumes there
NIT: s/support/supporting
>> + * is no multithread.
>> + */
>> /* representing HT siblings of each logical CPU */
>> DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_mask);
>> /* representing HT and core siblings of each logical CPU */
>> @@ -85,9 +89,13 @@ static int setup_cpu_sibling_map(int cpu)
>> !zalloc_cpumask_var(&per_cpu(cpu_core_mask, cpu)) )
>> return -ENOMEM;
>>
>> - /* A CPU is a sibling with itself and is always on its own core. */
>> + /*
>> + * Currently we assume there is no multithread and NUMA, so
>> + * a CPU is a sibling with itself, and the all possible CPUs
>> + * are supposed to belong to the same socket (NUMA node).
>> + */
>> cpumask_set_cpu(cpu, per_cpu(cpu_sibling_mask, cpu));
>> - cpumask_set_cpu(cpu, per_cpu(cpu_core_mask, cpu));
>> + cpumask_copy(per_cpu(cpu_core_mask, cpu), &cpu_possible_map);
>>
>> return 0;
>> }
>> @@ -277,6 +285,10 @@ void __init smp_init_cpus(void)
>> warning_add("WARNING: HMP COMPUTING HAS BEEN ENABLED.\n"
>> "It has implications on the security and stability of
>> the system,\n"
>> "unless the cpu affinity of all domains is
>> specified.\n");
>> +
>> + if ( system_cpuinfo.mpidr.mt == 1 )
>> + warning_add("WARNING: MULTITHREADING HAS BEEN DETECTED ON THE
>> PROCESSOR.\n"
>> + "It might impact the security of the system.\n");
>> }
>>
>> unsigned int __init smp_get_max_cpus(void)
>
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |