qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Zhao Liu <zhao1.liu@linux.intel.com>
To: "Michael S . Tsirkin" <mst@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>,
	Ani Sinha <anisinha@redhat.com>,
	Eduardo Habkost <eduardo@habkost.net>,
	Yanan Wang <wangyanan55@huawei.com>
Cc: "Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	qemu-devel@nongnu.org, "Zhenyu Wang" <zhenyu.z.wang@intel.com>,
	"Zhao Liu" <zhao1.liu@intel.com>
Subject: [PATCH v3 15/16] tests: bios-tables-test: Add test for smbios type4 thread count2
Date: Mon, 23 Oct 2023 17:46:34 +0800	[thread overview]
Message-ID: <20231023094635.1588282-16-zhao1.liu@linux.intel.com> (raw)
In-Reply-To: <20231023094635.1588282-1-zhao1.liu@linux.intel.com>

From: Zhao Liu <zhao1.liu@intel.com>

This tests the commit 7298fd7de5551 ("hw/smbios: Fix thread count in
type4").

In smbios_build_type_4_table() (hw/smbios/smbios.c), if the number of
threads in the socket is more than 255, then smbios type4 table encodes
threads per socket into the thread count2 field.

So for the topology in this case, there're the following considerations:
1. threads per socket should be more than 255 to ensure we could cover
   the thread count2 field.
2. The original bug was that threads per socket was miscalculated, so
   now we should configure as many topology levels as possible (multiple
   dies, no module since x86 hasn't supported it) to cover more general
   topology scenarios, to ensure that the threads per socket encoded in
   the thread count2 field is correct.
3. For the more general topology, we should also add "cpus" (presented
   threads for machine) and "maxcpus" (total threads for machine) to
   make sure that configuring unpluged CPUs in smp (cpus < maxcpus)
   does not affect the correctness of threads per socket for thread
   count2 field.

Note we don't consider the topology with multiple sockets since this
topology would create too many vCPUs (more than 255 threads per socket
with at least 2 sockets, which may cause the failure "Number of
hotpluggable cpus requested (*) exceeds the maximum cpus supported by
KVM (*) socket_accept failed: Resource temporarily unavailable"), and
the calculation of threads per socket has already been covered by
"thread count" test case.

Based on these considerations, select the topology as the follow:

-smp cpus=210,maxcpus=260,dies=2,cores=65,threads=2

The expected thread count2 = threads per socket = threads (2)
* cores (65) * dies (2) = 260.

Suggested-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
---
Changes since v2:
 * Reduced the vCPU number by deleting the multiple sockets in "-smp"
   to fix the failure: "Number of hotpluggable cpus requested (520)
   exceeds the maximum cpus supported by KVM (288) socket_accept
   failed: Resource temporarily unavailable". (Michael)

Changes since v1:
 * Dropped the extra variable: uint64_t thread_count2_addr. (Igor)
 * Added description of the consideration for topology selection of this
   case in commit message. (Igor)
---
 tests/qtest/bios-tables-test.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index 395ed7f9ff73..71af5cf69fc5 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -96,6 +96,7 @@ typedef struct {
     uint8_t smbios_core_count;
     uint16_t smbios_core_count2;
     uint8_t smbios_thread_count;
+    uint16_t smbios_thread_count2;
     uint8_t *required_struct_types;
     int required_struct_types_len;
     int type4_count;
@@ -644,6 +645,7 @@ static void smbios_cpu_test(test_data *data, uint32_t addr,
     uint8_t thread_count, expected_thread_count = data->smbios_thread_count;
     uint16_t speed, expected_speed[2];
     uint16_t core_count2, expected_core_count2 = data->smbios_core_count2;
+    uint16_t thread_count2, expected_thread_count2 = data->smbios_thread_count2;
     int offset[2];
     int i;
 
@@ -680,6 +682,15 @@ static void smbios_cpu_test(test_data *data, uint32_t addr,
         if (expected_core_count == 0xFF && expected_core_count2) {
             g_assert_cmpuint(core_count2, ==, expected_core_count2);
         }
+
+        thread_count2 = qtest_readw(data->qts,
+                            addr + offsetof(struct smbios_type_4,
+                            thread_count2));
+
+        /* Thread Count has reached its limit, checking Thread Count 2 */
+        if (expected_thread_count == 0xFF && expected_thread_count2) {
+            g_assert_cmpuint(thread_count2, ==, expected_thread_count2);
+        }
     }
 }
 
@@ -1050,6 +1061,7 @@ static void test_acpi_q35_tcg_thread_count(void)
         .required_struct_types = base_required_struct_types,
         .required_struct_types_len = ARRAY_SIZE(base_required_struct_types),
         .smbios_thread_count = 27,
+        .smbios_thread_count2 = 27,
     };
 
     test_acpi_one("-machine smbios-entry-point-type=64 "
@@ -1058,6 +1070,23 @@ static void test_acpi_q35_tcg_thread_count(void)
     free_test_data(&data);
 }
 
+static void test_acpi_q35_tcg_thread_count2(void)
+{
+    test_data data = {
+        .machine = MACHINE_Q35,
+        .variant = ".thread-count2",
+        .required_struct_types = base_required_struct_types,
+        .required_struct_types_len = ARRAY_SIZE(base_required_struct_types),
+        .smbios_thread_count = 0xFF,
+        .smbios_thread_count2 = 260,
+    };
+
+    test_acpi_one("-machine smbios-entry-point-type=64 "
+                  "-smp cpus=210,maxcpus=260,dies=2,cores=65,threads=2",
+                  &data);
+    free_test_data(&data);
+}
+
 static void test_acpi_q35_tcg_bridge(void)
 {
     test_data data = {};
@@ -2228,6 +2257,8 @@ int main(int argc, char *argv[])
                                test_acpi_q35_tcg_core_count2);
                 qtest_add_func("acpi/q35/thread-count",
                                test_acpi_q35_tcg_thread_count);
+                qtest_add_func("acpi/q35/thread-count2",
+                               test_acpi_q35_tcg_thread_count2);
             }
             if (qtest_has_device("virtio-iommu-pci")) {
                 qtest_add_func("acpi/q35/viot", test_acpi_q35_viot);
-- 
2.34.1



  parent reply	other threads:[~2023-10-23  9:36 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-23  9:46 [PATCH v3 00/16] tests: Add CPU topology related smbios test cases Zhao Liu
2023-10-23  9:46 ` [PATCH v3 01/16] tests: test-smp-parse: Add the test for cores/threads per socket helpers Zhao Liu
2023-10-23  9:46 ` [PATCH v3 02/16] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 count test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 03/16] tests: bios-tables-test: Add test for smbios type4 count Zhao Liu
2023-10-23  9:46 ` [PATCH v3 04/16] tests: bios-tables-test: Add ACPI table binaries for smbios type4 count test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 05/16] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 core " Zhao Liu
2023-10-23  9:46 ` [PATCH v3 06/16] tests: bios-tables-test: Add test for smbios type4 core count Zhao Liu
2023-10-23  9:46 ` [PATCH v3 07/16] tests: bios-tables-test: Add ACPI table binaries for smbios type4 core count test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 08/16] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 core count2 test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 09/16] tests: bios-tables-test: Extend smbios core count2 test to cover general topology Zhao Liu
2023-10-23  9:46 ` [PATCH v3 10/16] tests: bios-tables-test: Update ACPI table binaries for smbios core count2 test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 11/16] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 thread count test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 12/16] tests: bios-tables-test: Add test for smbios type4 thread count Zhao Liu
2023-10-23  9:46 ` [PATCH v3 13/16] tests: bios-tables-test: Add ACPI table binaries for smbios type4 thread count test Zhao Liu
2023-10-23  9:46 ` [PATCH v3 14/16] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 thread count2 test Zhao Liu
2023-10-23  9:46 ` Zhao Liu [this message]
2023-10-23  9:46 ` [PATCH v3 16/16] tests: bios-tables-test: Add ACPI table binaries " Zhao Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231023094635.1588282-16-zhao1.liu@linux.intel.com \
    --to=zhao1.liu@linux.intel.com \
    --cc=anisinha@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=imammedo@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=wangyanan55@huawei.com \
    --cc=zhao1.liu@intel.com \
    --cc=zhenyu.z.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).