Commit 3314778d authored by Igor Mammedov's avatar Igor Mammedov Committed by Michael S. Tsirkin
Browse files

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: default avatarIgor Mammedov <imammedo@redhat.com>
Acked-by: default avatarThomas Huth <thuth@redhat.com>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent acee774b
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -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); \
+1 −14
Original line number Diff line number Diff line
@@ -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)) {