On 03/19/20 14:30, Igor Mammedov wrote: > On Wed, 18 Mar 2020 14:48:20 +0800 > Heyi Guo <guoh...@huawei.com> wrote: > >> Add smbios type 4 CPU speed check for we added new options to set >> smbios type 4 "max speed" and "current speed". The default value >> should be 2000 when no option is specified, just as the old version >> did. >> >> We add the test case to one machine of each architecture, though it >> doesn't really run on aarch64 platform for smbios test can't run on >> uefi only platform yet. > I suggest to drop aarch64 part then as it just wastes resources, > alternatively you can enable smbios tests with UEFI. > (Not sure if uefi already exposes smbios entry point in test structure, > CCing Lazslo)
Yes, it does. For aarch64 specifically, please see the field called "Smbios30" in "tests/uefi-test-tools/UefiTestToolsPkg/Include/Guid/BiosTablesTest.h". Please see: - <https://bugs.launchpad.net/qemu/+bug/1821884>, - commit b097ba371a68 ("tests/uefi-test-tools: report the SMBIOS entry point structures", 2019-05-03). Thanks Laszlo > >> >> Signed-off-by: Heyi Guo <guoh...@huawei.com> >> >> --- >> Cc: "Michael S. Tsirkin" <m...@redhat.com> >> Cc: Igor Mammedov <imamm...@redhat.com> >> Cc: Thomas Huth <th...@redhat.com> >> Cc: Laurent Vivier <lviv...@redhat.com> >> Cc: Paolo Bonzini <pbonz...@redhat.com> >> --- >> tests/qtest/bios-tables-test.c | 42 ++++++++++++++++++++++++++++++++++ >> 1 file changed, 42 insertions(+) >> >> diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c >> index 0a597bbacf..f2d2e97b4a 100644 >> --- a/tests/qtest/bios-tables-test.c >> +++ b/tests/qtest/bios-tables-test.c >> @@ -77,6 +77,8 @@ typedef struct { >> GArray *tables; >> uint32_t smbios_ep_addr; >> struct smbios_21_entry_point smbios_ep_table; >> + uint16_t smbios_cpu_max_speed; >> + uint16_t smbios_cpu_curr_speed; >> uint8_t *required_struct_types; >> int required_struct_types_len; >> QTestState *qts; >> @@ -560,6 +562,31 @@ static inline bool smbios_single_instance(uint8_t type) >> } >> } >> >> +static bool smbios_cpu_test(test_data *data, uint32_t addr) >> +{ >> + uint16_t expect_speed[2]; >> + uint16_t real; >> + int offset[2]; >> + int i; >> + >> + /* Check CPU speed for backward compatibility */ >> + offset[0] = offsetof(struct smbios_type_4, max_speed); >> + offset[1] = offsetof(struct smbios_type_4, current_speed); >> + expect_speed[0] = data->smbios_cpu_max_speed ? : 2000; >> + expect_speed[1] = data->smbios_cpu_curr_speed ? : 2000; >> + >> + for (i = 0; i < 2; i++) { >> + real = qtest_readw(data->qts, addr + offset[i]); >> + if (real != expect_speed[i]) { >> + fprintf(stderr, "Unexpected SMBIOS CPU speed: real %u expect >> %u\n", >> + real, expect_speed[i]); >> + return false; >> + } >> + } >> + >> + return true; >> +} >> + >> static void test_smbios_structs(test_data *data) >> { >> DECLARE_BITMAP(struct_bitmap, SMBIOS_MAX_TYPE+1) = { 0 }; >> @@ -582,6 +609,10 @@ static void test_smbios_structs(test_data *data) >> } >> set_bit(type, struct_bitmap); >> >> + if (type == 4) { >> + g_assert(smbios_cpu_test(data, addr)); >> + } >> + >> /* seek to end of unformatted string area of this struct ("\0\0") */ >> prv = crt = 1; >> while (prv || crt) { >> @@ -716,6 +747,11 @@ static void test_acpi_q35_tcg(void) >> data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); >> test_acpi_one(NULL, &data); >> free_test_data(&data); >> + >> + data.smbios_cpu_max_speed = 3000; >> + data.smbios_cpu_curr_speed = 2600; >> + test_acpi_one("-smbios type=4,max-speed=3000,current-speed=2600", >> &data); >> + free_test_data(&data); >> } >> >> static void test_acpi_q35_tcg_bridge(void) >> @@ -1017,6 +1053,12 @@ static void test_acpi_virt_tcg(void) >> >> test_acpi_one("-cpu cortex-a57", &data); >> free_test_data(&data); >> + >> + data.smbios_cpu_max_speed = 2900; >> + data.smbios_cpu_curr_speed = 2700; >> + test_acpi_one("-cpu cortex-a57 " >> + "-smbios type=4,max-speed=2900,current-speed=2700", >> &data); >> + free_test_data(&data); >> } >> >> int main(int argc, char *argv[]) >