hw/arm/virt: Consider SMP configuration in CPU topology
Currently, the SMP configuration isn't considered when the CPU topology is populated. In this case, it's impossible to provide the default CPU-to-NUMA mapping or association based on the socket ID of the given CPU. This takes account of SMP configuration when the CPU topology is populated. The die ID for the given CPU isn't assigned since it's not supported on arm/virt machine. Besides, the used SMP configuration in qtest/numa-test/aarch64_numa_cpu() is corrcted to avoid testing failure Signed-off-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Yanan Wang <wangyanan55@huawei.com> Acked-by: Igor Mammedov <imammedo@redhat.com> Message-id: 20220503140304.855514-4-gshan@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									ac7199a252
								
							
						
					
					
						commit
						c9ec4cb5e4
					
				@ -2562,6 +2562,7 @@ static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms)
 | 
			
		||||
    int n;
 | 
			
		||||
    unsigned int max_cpus = ms->smp.max_cpus;
 | 
			
		||||
    VirtMachineState *vms = VIRT_MACHINE(ms);
 | 
			
		||||
    MachineClass *mc = MACHINE_GET_CLASS(vms);
 | 
			
		||||
 | 
			
		||||
    if (ms->possible_cpus) {
 | 
			
		||||
        assert(ms->possible_cpus->len == max_cpus);
 | 
			
		||||
@ -2575,8 +2576,20 @@ static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms)
 | 
			
		||||
        ms->possible_cpus->cpus[n].type = ms->cpu_type;
 | 
			
		||||
        ms->possible_cpus->cpus[n].arch_id =
 | 
			
		||||
            virt_cpu_mp_affinity(vms, n);
 | 
			
		||||
 | 
			
		||||
        assert(!mc->smp_props.dies_supported);
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.has_socket_id = true;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.socket_id =
 | 
			
		||||
            n / (ms->smp.clusters * ms->smp.cores * ms->smp.threads);
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.has_cluster_id = true;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.cluster_id =
 | 
			
		||||
            (n / (ms->smp.cores * ms->smp.threads)) % ms->smp.clusters;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.has_core_id = true;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.core_id =
 | 
			
		||||
            (n / ms->smp.threads) % ms->smp.cores;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.has_thread_id = true;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.thread_id = n;
 | 
			
		||||
        ms->possible_cpus->cpus[n].props.thread_id =
 | 
			
		||||
            n % ms->smp.threads;
 | 
			
		||||
    }
 | 
			
		||||
    return ms->possible_cpus;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user