mirror of https://gitee.com/openkylin/qemu.git
tests: smbios: fetch whole table in one step instead of reading it step by step
replace a bunch of ACPI_READ_ARRAY/ACPI_READ_FIELD macro, that read SMBIOS table field by field with one memread() to fetch whole table at once and drop no longer used ACPI_READ_ARRAY/ACPI_READ_FIELD macro. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Acked-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
acee774b3d
commit
3314778d88
|
@ -30,23 +30,6 @@ typedef struct {
|
|||
bool tmp_files_retain; /* do not delete the temp asl/aml */
|
||||
} AcpiSdtTable;
|
||||
|
||||
#define ACPI_READ_FIELD(qts, field, addr) \
|
||||
do { \
|
||||
qtest_memread(qts, addr, &field, sizeof(field)); \
|
||||
addr += sizeof(field); \
|
||||
} while (0)
|
||||
|
||||
#define ACPI_READ_ARRAY_PTR(qts, arr, length, addr) \
|
||||
do { \
|
||||
int idx; \
|
||||
for (idx = 0; idx < length; ++idx) { \
|
||||
ACPI_READ_FIELD(qts, arr[idx], addr); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define ACPI_READ_ARRAY(qts, arr, addr) \
|
||||
ACPI_READ_ARRAY_PTR(qts, arr, sizeof(arr) / sizeof(arr[0]), addr)
|
||||
|
||||
#define ACPI_ASSERT_CMP(actual, expected) do { \
|
||||
char ACPI_ASSERT_CMP_str[5] = {}; \
|
||||
memcpy(ACPI_ASSERT_CMP_str, &actual, 4); \
|
||||
|
|
|
@ -408,32 +408,19 @@ static bool smbios_ep_table_ok(test_data *data)
|
|||
struct smbios_21_entry_point *ep_table = &data->smbios_ep_table;
|
||||
uint32_t addr = data->smbios_ep_addr;
|
||||
|
||||
ACPI_READ_ARRAY(data->qts, ep_table->anchor_string, addr);
|
||||
qtest_memread(data->qts, addr, ep_table, sizeof(*ep_table));
|
||||
if (memcmp(ep_table->anchor_string, "_SM_", 4)) {
|
||||
return false;
|
||||
}
|
||||
ACPI_READ_FIELD(data->qts, ep_table->checksum, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->length, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->smbios_major_version, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->smbios_minor_version, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->max_structure_size, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->entry_point_revision, addr);
|
||||
ACPI_READ_ARRAY(data->qts, ep_table->formatted_area, addr);
|
||||
ACPI_READ_ARRAY(data->qts, ep_table->intermediate_anchor_string, addr);
|
||||
if (memcmp(ep_table->intermediate_anchor_string, "_DMI_", 5)) {
|
||||
return false;
|
||||
}
|
||||
ACPI_READ_FIELD(data->qts, ep_table->intermediate_checksum, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->structure_table_length, addr);
|
||||
if (ep_table->structure_table_length == 0) {
|
||||
return false;
|
||||
}
|
||||
ACPI_READ_FIELD(data->qts, ep_table->structure_table_address, addr);
|
||||
ACPI_READ_FIELD(data->qts, ep_table->number_of_structures, addr);
|
||||
if (ep_table->number_of_structures == 0) {
|
||||
return false;
|
||||
}
|
||||
ACPI_READ_FIELD(data->qts, ep_table->smbios_bcd_revision, addr);
|
||||
if (acpi_calc_checksum((uint8_t *)ep_table, sizeof *ep_table) ||
|
||||
acpi_calc_checksum((uint8_t *)ep_table + 0x10,
|
||||
sizeof *ep_table - 0x10)) {
|
||||
|
|
Loading…
Reference in New Issue