[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 38/63] tests: bios-tables-test: Add test for smbios type4 thread c
From: |
Michael S. Tsirkin |
Subject: |
[PULL 38/63] tests: bios-tables-test: Add test for smbios type4 thread count2 |
Date: |
Tue, 7 Nov 2023 05:12:17 -0500 |
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>
Message-Id: <20231023094635.1588282-16-zhao1.liu@linux.intel.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
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 395ed7f9ff..71af5cf69f 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);
--
MST
- [PULL 30/63] tests: bios-tables-test: Add ACPI table binaries for smbios type4 core count test, (continued)
- [PULL 30/63] tests: bios-tables-test: Add ACPI table binaries for smbios type4 core count test, Michael S. Tsirkin, 2023/11/07
- [PULL 34/63] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 thread count test, Michael S. Tsirkin, 2023/11/07
- [PULL 33/63] tests: bios-tables-test: Update ACPI table binaries for smbios core count2 test, Michael S. Tsirkin, 2023/11/07
- [PULL 35/63] tests: bios-tables-test: Add test for smbios type4 thread count, Michael S. Tsirkin, 2023/11/07
- [PULL 32/63] tests: bios-tables-test: Extend smbios core count2 test to cover general topology, Michael S. Tsirkin, 2023/11/07
- [PULL 37/63] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 thread count2 test, Michael S. Tsirkin, 2023/11/07
- [PULL 36/63] tests: bios-tables-test: Add ACPI table binaries for smbios type4 thread count test, Michael S. Tsirkin, 2023/11/07
- [PULL 39/63] tests: bios-tables-test: Add ACPI table binaries for smbios type4 thread count2 test, Michael S. Tsirkin, 2023/11/07
- [PULL 40/63] hw/cxl: Use a switch to explicitly check size in caps_reg_read(), Michael S. Tsirkin, 2023/11/07
- [PULL 41/63] hw/cxl: Use switch statements for read and write of cachemem registers, Michael S. Tsirkin, 2023/11/07
- [PULL 38/63] tests: bios-tables-test: Add test for smbios type4 thread count2,
Michael S. Tsirkin <=
- [PULL 43/63] hw/cxl: Line length reductions, Michael S. Tsirkin, 2023/11/07
- [PULL 42/63] hw/cxl: CXLDVSECPortExtensions renamed to CXLDVSECPortExt, Michael S. Tsirkin, 2023/11/07
- [PULL 45/63] hw/cxl/mbox: Pull the payload out of struct cxl_cmd and make instances constant, Michael S. Tsirkin, 2023/11/07
- [PULL 44/63] hw/cxl: Fix a QEMU_BUILD_BUG_ON() in switch statement scope issue., Michael S. Tsirkin, 2023/11/07
- [PULL 47/63] hw/cxl/mbox: Pull the CCI definition out of the CXLDeviceState, Michael S. Tsirkin, 2023/11/07
- [PULL 46/63] hw/cxl/mbox: Split mailbox command payload into separate input and output, Michael S. Tsirkin, 2023/11/07
- [PULL 49/63] hw/pci-bridge/cxl_upstream: Move defintion of device to header., Michael S. Tsirkin, 2023/11/07
- [PULL 50/63] hw/cxl: Add a switch mailbox CCI function, Michael S. Tsirkin, 2023/11/07
- [PULL 48/63] hw/cxl/mbox: Generalize the CCI command processing, Michael S. Tsirkin, 2023/11/07
- [PULL 53/63] hw/pci-bridge/cxl_downstream: Set default link width and link speed, Michael S. Tsirkin, 2023/11/07