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

[qemu-xen stable-4.18] hw/smbios: Fix core count in type4



commit abb4828d5d5cd0fba82e958779a7c14d3b44e2df
Author:     Zhao Liu <zhao1.liu@xxxxxxxxx>
AuthorDate: Wed Jun 28 21:54:37 2023 +0800
Commit:     Michael Tokarev <mjt@xxxxxxxxxx>
CommitDate: Sun Sep 10 19:39:41 2023 +0300

    hw/smbios: Fix core count in type4
    
    >From SMBIOS 3.0 specification, core count field means:
    
    Core Count is the number of cores detected by the BIOS for this
    processor socket. [1]
    
    Before 003f230e37d7 ("machine: Tweak the order of topology members in
    struct CpuTopology"), MachineState.smp.cores means "the number of cores
    in one package", and it's correct to use smp.cores for core count.
    
    But 003f230e37d7 changes the smp.cores' meaning to "the number of cores
    in one die" and doesn't change the original smp.cores' use in smbios as
    well, which makes core count in type4 go wrong.
    
    Fix this issue with the correct "cores per socket" caculation.
    
    [1] SMBIOS 3.0.0, section 7.5.6, Processor Information - Core Count
    
    Fixes: 003f230e37d7 ("machine: Tweak the order of topology members in 
struct CpuTopology")
    Signed-off-by: Zhao Liu <zhao1.liu@xxxxxxxxx>
    Message-Id: <20230628135437.1145805-5-zhao1.liu@xxxxxxxxxxxxxxx>
    Reviewed-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
    Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
    (cherry picked from commit 196ea60a734c346d7d75f1d89aa37703d4d854e7)
    Signed-off-by: Michael Tokarev <mjt@xxxxxxxxxx>
---
 hw/smbios/smbios.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
index 3aae9328c0..10cd22f610 100644
--- a/hw/smbios/smbios.c
+++ b/hw/smbios/smbios.c
@@ -714,6 +714,7 @@ static void smbios_build_type_4_table(MachineState *ms, 
unsigned instance)
     char sock_str[128];
     size_t tbl_len = SMBIOS_TYPE_4_LEN_V28;
     unsigned threads_per_socket;
+    unsigned cores_per_socket;
 
     if (smbios_ep_type == SMBIOS_ENTRY_POINT_TYPE_64) {
         tbl_len = SMBIOS_TYPE_4_LEN_V30;
@@ -749,8 +750,9 @@ static void smbios_build_type_4_table(MachineState *ms, 
unsigned instance)
     SMBIOS_TABLE_SET_STR(4, part_number_str, type4.part);
 
     threads_per_socket = machine_topo_get_threads_per_socket(ms);
+    cores_per_socket = machine_topo_get_cores_per_socket(ms);
 
-    t->core_count = (ms->smp.cores > 255) ? 0xFF : ms->smp.cores;
+    t->core_count = (cores_per_socket > 255) ? 0xFF : cores_per_socket;
     t->core_enabled = t->core_count;
 
     t->thread_count = (threads_per_socket > 255) ? 0xFF : threads_per_socket;
@@ -759,7 +761,7 @@ static void smbios_build_type_4_table(MachineState *ms, 
unsigned instance)
     t->processor_family2 = cpu_to_le16(0x01); /* Other */
 
     if (tbl_len == SMBIOS_TYPE_4_LEN_V30) {
-        t->core_count2 = t->core_enabled2 = cpu_to_le16(ms->smp.cores);
+        t->core_count2 = t->core_enabled2 = cpu_to_le16(cores_per_socket);
         t->thread_count2 = cpu_to_le16(threads_per_socket);
     }
 
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#stable-4.18



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.