Skip to content

Commit 903916f

Browse files
Chuang Xubonzini
Chuang Xu
authored andcommitted
i386/cpu: fixup number of addressable IDs for processor cores in the physical package
When QEMU is started with: -cpu host,host-cache-info=on,l3-cache=off \ -smp 2,sockets=1,dies=1,cores=1,threads=2 Guest can't acquire maximum number of addressable IDs for processor cores in the physical package from CPUID[04H]. When creating a CPU topology of 1 core per package, host-cache-info only uses the Host's addressable core IDs field (CPUID.04H.EAX[bits 31-26]), resulting in a conflict (on the multicore Host) between the Guest core topology information in this field and the Guest's actual cores number. Fix it by removing the unnecessary condition to cover 1 core per package case. This is safe because cores_per_pkg will not be 0 and will be at least 1. Fixes: d7caf13 ("x86: cpu: fixup number of addressable IDs for logical processors sharing cache") Signed-off-by: Guixiong Wei <[email protected]> Signed-off-by: Yipeng Yin <[email protected]> Signed-off-by: Chuang Xu <[email protected]> Reviewed-by: Zhao Liu <[email protected]> Message-ID: <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
1 parent b4912af commit 903916f

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

target/i386/cpu.c

+2-4
Original file line numberDiff line numberDiff line change
@@ -6455,10 +6455,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
64556455
if (*eax & 31) {
64566456
int host_vcpus_per_cache = 1 + ((*eax & 0x3FFC000) >> 14);
64576457

6458-
if (cores_per_pkg > 1) {
6459-
*eax &= ~0xFC000000;
6460-
*eax |= max_core_ids_in_package(&topo_info) << 26;
6461-
}
6458+
*eax &= ~0xFC000000;
6459+
*eax |= max_core_ids_in_package(&topo_info) << 26;
64626460
if (host_vcpus_per_cache > threads_per_pkg) {
64636461
*eax &= ~0x3FFC000;
64646462

0 commit comments

Comments
 (0)