Skip to content

Commit

Permalink
tests: bios-tables-test: Add test for smbios type4 count
Browse files Browse the repository at this point in the history
This tests the commit d79a284 ("hw/smbios: Fix smbios_smp_sockets
calculation").

In smbios_get_tables() (hw/smbios/smbios.c), smbios type4 table is built
for each socket, so the count of type4 tables should be equal to the
number of sockets.

Thus for the topology in this case, there're the following considerations:
1. The topology should include multiple sockets to ensure smbios could
   create type4 tables for each socket.
2. In addition to sockets, for the more general topology, we should also
   configure as many topology levels as possible (multiple dies, no
   module since x86 hasn't supported it), to ensure that smbios is able
   to exclude the effect of other topology levels to create the type4
   tables only for sockets.
3. The original miscalculation bug also misused "smp.cpus", so it's
   necessary to configure "cpus" (presented threads for machine) and
   "maxcpus" (total threads for machine) as well to make sure that
   configuring unpluged CPUs in smp (cpus < maxcpus) does not affect
   the correctness of the count of type4 tables.

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

-smp cpus=100,maxcpus=120,sockets=5,dies=2,cores=4,threads=3

The expected count of type4 tables = sockets (5).

Suggested-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Message-Id: <20230928125943.1816922-4-zhao1.liu@linux.intel.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
trueptolemy authored and mstsirkin committed Oct 19, 2023
1 parent 9717aa0 commit a0380d4
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion tests/qtest/bios-tables-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ typedef struct {
uint16_t smbios_core_count2;
uint8_t *required_struct_types;
int required_struct_types_len;
int type4_count;
QTestState *qts;
} test_data;

Expand Down Expand Up @@ -673,12 +674,21 @@ static void smbios_cpu_test(test_data *data, uint32_t addr,
}
}

static void smbios_type4_count_test(test_data *data, int type4_count)
{
int expected_type4_count = data->type4_count;

if (expected_type4_count) {
g_assert_cmpuint(type4_count, ==, expected_type4_count);
}
}

static void test_smbios_structs(test_data *data, SmbiosEntryPointType ep_type)
{
DECLARE_BITMAP(struct_bitmap, SMBIOS_MAX_TYPE+1) = { 0 };

SmbiosEntryPoint *ep_table = &data->smbios_ep_table;
int i = 0, len, max_len = 0;
int i = 0, len, max_len = 0, type4_count = 0;
uint8_t type, prv, crt;
uint64_t addr;

Expand All @@ -704,6 +714,7 @@ static void test_smbios_structs(test_data *data, SmbiosEntryPointType ep_type)

if (type == 4) {
smbios_cpu_test(data, addr, ep_type);
type4_count++;
}

/* seek to end of unformatted string area of this struct ("\0\0") */
Expand Down Expand Up @@ -747,6 +758,8 @@ static void test_smbios_structs(test_data *data, SmbiosEntryPointType ep_type)
for (i = 0; i < data->required_struct_types_len; i++) {
g_assert(test_bit(data->required_struct_types[i], struct_bitmap));
}

smbios_type4_count_test(data, type4_count);
}

static void test_acpi_load_tables(test_data *data)
Expand Down Expand Up @@ -970,6 +983,22 @@ static void test_acpi_q35_tcg(void)
free_test_data(&data);
}

static void test_acpi_q35_tcg_type4_count(void)
{
test_data data = {
.machine = MACHINE_Q35,
.variant = ".type4-count",
.required_struct_types = base_required_struct_types,
.required_struct_types_len = ARRAY_SIZE(base_required_struct_types),
.type4_count = 5,
};

test_acpi_one("-machine smbios-entry-point-type=64 "
"-smp cpus=100,maxcpus=120,sockets=5,"
"dies=2,cores=4,threads=3", &data);
free_test_data(&data);
}

static void test_acpi_q35_tcg_core_count2(void)
{
test_data data = {
Expand Down Expand Up @@ -2147,6 +2176,8 @@ int main(int argc, char *argv[])
if (has_kvm) {
qtest_add_func("acpi/q35/kvm/xapic", test_acpi_q35_kvm_xapic);
qtest_add_func("acpi/q35/kvm/dmar", test_acpi_q35_kvm_dmar);
qtest_add_func("acpi/q35/type4-count",
test_acpi_q35_tcg_type4_count);
qtest_add_func("acpi/q35/core-count2",
test_acpi_q35_tcg_core_count2);
}
Expand Down

0 comments on commit a0380d4

Please sign in to comment.