qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Fix CPUID_Fn8000001E_EBX for AMD


From: Jade Cheng
Subject: [PATCH] Fix CPUID_Fn8000001E_EBX for AMD
Date: Wed, 30 Jun 2021 16:25:51 +0800

According to AMD64 Arch Programmer's Manual Appendix D,
bits 7:0 in Fn8000_001E_EBX should be physical core(s) per logical processor, 
not per die.

Signed-off-by: Jade Cheng <chengjiayao@bytedance.com>
---
 target/i386/cpu.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index a9fe1662d3..417f5ba81f 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -381,7 +381,13 @@ static void encode_topo_cpuid8000001e(X86CPU *cpu, 
X86CPUTopoInfo *topo_info,
      *  NOTE: CoreId is already part of apic_id. Just use it. We can
      *  use all the 8 bits to represent the core_id here.
      */
-    *ebx = ((topo_info->threads_per_core - 1) << 8) | (topo_ids.core_id & 
0xFF);
+    uint32_t core_id = topo_ids.core_id;
+
+    if (IS_AMD_CPU(&cpu->env)) {
+        core_id = topo_ids.core_id + topo_ids.die_id * 
topo_info->cores_per_die;
+    }
+
+    *ebx = ((topo_info->threads_per_core - 1) << 8) | (core_id & 0xFF);
 
     /*
      * CPUID_Fn8000001E_ECX [Node Identifiers] (NodeId)
-- 
2.24.3 (Apple Git-128)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]