Hi Zhao,

On 2024/5/28 上午10:31, Zhao Liu wrote:
Hi Chuang,

On Mon, May 27, 2024 at 11:13:33AM +0800, Chuang Xu wrote:
Date: Mon, 27 May 2024 11:13:33 +0800
From: Chuang Xu <xuchuangxc...@bytedance.com>
Subject: [PATCH] x86: cpu: fixup number of addressable IDs for processor
  cores in the physical package
According to the usual practice of QEMU commits, people tend to use
"i386/cpu" as the subject prefix, which indicates the code path.

X-Mailer: git-send-email 2.24.3 (Apple Git-128)

When QEMU is started with:
-cpu host,host-cache-info=on,l3-cache=off \
Just a discussion, "l3-cache=off" doesn't work in host cache pssthu
case, do you have a specific need that you don't want to see l3 cache?

No specific need, just generated by libvirt.
-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].

This bug was introduced in commit d7caf13b5fcf742e5680c1d3448ba070fc811644.
Fix it by changing the judgement condition to a >= 1.
Pls add a "Fixes" tag like:

Fixes: d7caf13b5fcf ("x86: cpu: fixup number of addressable IDs for logical 
processors sharing cache")

Since this is a historical issue that deserves to be ported to the
stable branch, you can cc stable list by:

Cc: qemu-sta...@nongnu.org

Signed-off-by: Chuang Xu <xuchuangxc...@bytedance.com>
As the patch sender, it's better to put your signature on the last line.
;-)

Signed-off-by: Guixiong Wei <weiguixi...@bytedance.com>
Signed-off-by: Yipeng Yin <yinyip...@bytedance.com>
---
  target/i386/cpu.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index cd16cb893d..0369c01153 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -6097,7 +6097,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, 
uint32_t count,
              if (*eax & 31) {
                  int host_vcpus_per_cache = 1 + ((*eax & 0x3FFC000) >> 14);
                  int vcpus_per_socket = cs->nr_cores * cs->nr_threads;
-                if (cs->nr_cores > 1) {
+                if (cs->nr_cores >= 1) {
Like Igor suggested, this condition could be removed since cs->nr_cores can't
be 0.

                      *eax &= ~0xFC000000;
                      *eax |= (pow2ceil(cs->nr_cores) - 1) << 26;
                  }
...the code is outdated, pls rebase on the latest master branch.
My fault, sorry for forgetting to pull the latest code..
Regards,
Zhao

Thanks for all your suggestions!

Chuang


Reply via email to