All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Igor Mammedov <imammedo@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] [PULL 10/44] tests: acpi: simplify rsdt handling
Date: Mon, 14 Jan 2019 20:35:46 -0500	[thread overview]
Message-ID: <20190115003812.11329-11-mst@redhat.com> (raw)
In-Reply-To: <20190115003812.11329-1-mst@redhat.com>

From: Igor Mammedov <imammedo@redhat.com>

RSDT referenced tables always have length at offset 4 and checksum at
offset 9, that's enough for reusing fetch_table() and replacing custom
RSDT fetching code with it.
While at it
 * merge fetch_rsdt_referenced_tables() into test_acpi_rsdt_table()
 * drop test_data::rsdt_table/rsdt_tables_addr/rsdt_tables_nr since
   we need this data only for duration of test_acpi_rsdt_table() to
   fetch other tables and use locals instead.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 tests/bios-tables-test.c | 133 ++++++++++++++++-----------------------
 1 file changed, 53 insertions(+), 80 deletions(-)

diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c
index b2a40bbda3..8082adce41 100644
--- a/tests/bios-tables-test.c
+++ b/tests/bios-tables-test.c
@@ -28,12 +28,9 @@ typedef struct {
     const char *variant;
     uint32_t rsdp_addr;
     uint8_t rsdp_table[36 /* ACPI 2.0+ RSDP size */];
-    AcpiRsdtDescriptorRev1 rsdt_table;
     uint32_t dsdt_addr;
     uint32_t facs_addr;
     AcpiFacsDescriptorRev1 facs_table;
-    uint32_t *rsdt_tables_addr;
-    int rsdt_tables_nr;
     GArray *tables;
     uint32_t smbios_ep_addr;
     struct smbios_21_entry_point smbios_ep_table;
@@ -50,33 +47,50 @@ static const char *iasl = stringify(CONFIG_IASL);
 static const char *iasl;
 #endif
 
+static void cleanup_table_descriptor(AcpiSdtTable *table)
+{
+    g_free(table->aml);
+    if (table->aml_file &&
+        !table->tmp_files_retain &&
+        g_strstr_len(table->aml_file, -1, "aml-")) {
+        unlink(table->aml_file);
+    }
+    g_free(table->aml_file);
+    g_free(table->asl);
+    if (table->asl_file &&
+        !table->tmp_files_retain) {
+        unlink(table->asl_file);
+    }
+    g_free(table->asl_file);
+}
+
 static void free_test_data(test_data *data)
 {
-    AcpiSdtTable *temp;
     int i;
 
-    g_free(data->rsdt_tables_addr);
-
     for (i = 0; i < data->tables->len; ++i) {
-        temp = &g_array_index(data->tables, AcpiSdtTable, i);
-        g_free(temp->aml);
-        if (temp->aml_file &&
-            !temp->tmp_files_retain &&
-            g_strstr_len(temp->aml_file, -1, "aml-")) {
-            unlink(temp->aml_file);
-        }
-        g_free(temp->aml_file);
-        g_free(temp->asl);
-        if (temp->asl_file &&
-            !temp->tmp_files_retain) {
-            unlink(temp->asl_file);
-        }
-        g_free(temp->asl_file);
+        cleanup_table_descriptor(&g_array_index(data->tables, AcpiSdtTable, i));
     }
 
     g_array_free(data->tables, true);
 }
 
+/** fetch_table
+ *   load ACPI table at @addr into table descriptor @sdt_table
+ *   and check that header checksum matches actual one.
+ */
+static void fetch_table(QTestState *qts, AcpiSdtTable *sdt_table, uint32_t addr)
+{
+    qtest_memread(qts, addr + 4 /* Length of ACPI table */,
+                  &sdt_table->aml_len, 4);
+    sdt_table->aml_len = le32_to_cpu(sdt_table->aml_len);
+    sdt_table->aml = g_malloc0(sdt_table->aml_len);
+    /* get whole table */
+    qtest_memread(qts, addr, sdt_table->aml, sdt_table->aml_len);
+
+    g_assert(!acpi_calc_checksum(sdt_table->aml, sdt_table->aml_len));
+}
+
 static void test_acpi_rsdp_address(test_data *data)
 {
     uint32_t off = acpi_find_rsdp_address(data->qts);
@@ -109,36 +123,30 @@ static void test_acpi_rsdp_table(test_data *data)
 
 static void test_acpi_rsdt_table(test_data *data)
 {
-    AcpiRsdtDescriptorRev1 *rsdt_table = &data->rsdt_table;
     uint32_t addr = acpi_get_rsdt_address(data->rsdp_table);
-    uint32_t *tables;
-    int tables_nr;
-    uint8_t checksum;
-    uint32_t rsdt_table_length;
+    const int entry_size = 4 /* 32-bit Entry size */;
+    const int tables_off = 36 /* 1st Entry */;
+    AcpiSdtTable rsdt = {};
+    int i, table_len, table_nr;
+    uint32_t *entry;
 
-    /* read the header */
-    ACPI_READ_TABLE_HEADER(data->qts, rsdt_table, addr);
-    ACPI_ASSERT_CMP(rsdt_table->signature, "RSDT");
+    fetch_table(data->qts, &rsdt, addr);
+    ACPI_ASSERT_CMP(rsdt.header->signature, "RSDT");
 
-    rsdt_table_length = le32_to_cpu(rsdt_table->length);
+    /* Load all tables and add to test list directly RSDT referenced tables */
+    table_len = le32_to_cpu(rsdt.header->length);
+    table_nr = (table_len - tables_off) / entry_size;
+    for (i = 0; i < table_nr; i++) {
+        AcpiSdtTable ssdt_table = {};
 
-    /* compute the table entries in rsdt */
-    tables_nr = (rsdt_table_length - sizeof(AcpiRsdtDescriptorRev1)) /
-                sizeof(uint32_t);
-    g_assert(tables_nr > 0);
+        entry = (uint32_t *)(rsdt.aml + tables_off + i * entry_size);
+        addr = le32_to_cpu(*entry);
+        fetch_table(data->qts, &ssdt_table, addr);
 
-    /* get the addresses of the tables pointed by rsdt */
-    tables = g_new0(uint32_t, tables_nr);
-    ACPI_READ_ARRAY_PTR(data->qts, tables, tables_nr, addr);
-
-    checksum = acpi_calc_checksum((uint8_t *)rsdt_table, rsdt_table_length) +
-               acpi_calc_checksum((uint8_t *)tables,
-                                  tables_nr * sizeof(uint32_t));
-    g_assert(!checksum);
-
-   /* SSDT tables after FADT */
-    data->rsdt_tables_addr = tables;
-    data->rsdt_tables_nr = tables_nr;
+        /* Add table to ASL test tables list */
+        g_array_append_val(data->tables, ssdt_table);
+    }
+    cleanup_table_descriptor(&rsdt);
 }
 
 static void test_acpi_fadt_table(test_data *data)
@@ -197,22 +205,6 @@ static void test_acpi_facs_table(test_data *data)
     ACPI_ASSERT_CMP(facs_table->signature, "FACS");
 }
 
-/** fetch_table
- *   load ACPI table at @addr into table descriptor @sdt_table
- *   and check that header checksum matches actual one.
- */
-static void fetch_table(QTestState *qts, AcpiSdtTable *sdt_table, uint32_t addr)
-{
-    qtest_memread(qts, addr + 4 /* Length of ACPI table */,
-                  &sdt_table->aml_len, 4);
-    sdt_table->aml_len = le32_to_cpu(sdt_table->aml_len);
-    sdt_table->aml = g_malloc0(sdt_table->aml_len);
-    /* get whole table */
-    qtest_memread(qts, addr, sdt_table->aml, sdt_table->aml_len);
-
-    g_assert(!acpi_calc_checksum(sdt_table->aml, sdt_table->aml_len));
-}
-
 static void test_acpi_dsdt_table(test_data *data)
 {
     AcpiSdtTable dsdt_table = {};
@@ -225,24 +217,6 @@ static void test_acpi_dsdt_table(test_data *data)
     g_array_append_val(data->tables, dsdt_table);
 }
 
-/* Load all tables and add to test list directly RSDT referenced tables */
-static void fetch_rsdt_referenced_tables(test_data *data)
-{
-    int tables_nr = data->rsdt_tables_nr;
-    int i;
-
-    for (i = 0; i < tables_nr; i++) {
-        AcpiSdtTable ssdt_table = {};
-        uint32_t addr;
-
-        addr = le32_to_cpu(data->rsdt_tables_addr[i]);
-        fetch_table(data->qts, &ssdt_table, addr);
-
-        /* Add table to ASL test tables list */
-        g_array_append_val(data->tables, ssdt_table);
-    }
-}
-
 static void dump_aml_files(test_data *data, bool rebuild)
 {
     AcpiSdtTable *sdt;
@@ -625,7 +599,6 @@ static void test_acpi_one(const char *params, test_data *data)
     test_acpi_rsdp_address(data);
     test_acpi_rsdp_table(data);
     test_acpi_rsdt_table(data);
-    fetch_rsdt_referenced_tables(data);
     test_acpi_fadt_table(data);
     test_acpi_facs_table(data);
     test_acpi_dsdt_table(data);
-- 
MST

  parent reply	other threads:[~2019-01-15  1:41 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-15  1:35 [Qemu-devel] [PULL 00/44] pci, pc, virtio: fixes, features Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 01/44] pci/pcie: stop plug/unplug if the slot is locked Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 02/44] msix: make pba size math more uniform Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 03/44] hw/misc/ivshmem: Remove deprecated "ivshmem" legacy device Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 04/44] qemu: avoid memory leak while remove disk Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 05/44] tests: vhost-user-test: initialize 'fd' in chr_read Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 06/44] vhost-user: fix ioeventfd_enabled Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 07/44] util: check the return value of fcntl in qemu_set_{block, nonblock} Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 08/44] tests: acpi: use AcpiSdtTable::aml in consistent way Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 09/44] tests: acpi: make sure FADT is fetched only once Michael S. Tsirkin
2019-01-15  1:35 ` Michael S. Tsirkin [this message]
2019-01-15  1:35 ` [Qemu-devel] [PULL 11/44] tests: acpi: reuse fetch_table() for fetching FACS and DSDT Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 12/44] tests: acpi: reuse fetch_table() in vmgenid-test Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 13/44] tests: smbios: fetch whole table in one step instead of reading it step by step Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 14/44] tests: acpi: squash sanitize_fadt_ptrs() into test_acpi_fadt_table() Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 15/44] tests: acpi: use AcpiSdtTable::aml instead of AcpiSdtTable::header::signature Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 16/44] virtio-net: support RSC v4/v6 tcp traffic for Windows HCK Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 17/44] virtio-net: changed VIRTIO_NET_F_RSC_EXT to be 61 Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 18/44] virtio: split vhost vsock bits from virtio-pci Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 19/44] virtio: split virtio input host " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 20/44] virtio: split virtio input " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 21/44] virtio: split virtio rng " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 22/44] virtio: split virtio balloon " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 23/44] virtio: split virtio 9p " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 24/44] virtio: split vhost user blk " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 25/44] virtio: split vhost user scsi " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 26/44] virtio: split vhost " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 27/44] virtio: split virtio " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 28/44] virtio: split virtio blk " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 29/44] virtio: split virtio net " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 30/44] virtio: split virtio serial " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 31/44] virtio: split virtio gpu bits from virtio-pci.h Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 32/44] virtio: split virtio crypto " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 33/44] virtio: virtio 9p really requires CONFIG_VIRTFS to work Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 34/44] globals: Allow global properties to be optional Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 35/44] virtio: Make disable-legacy/disable-modern compat properties optional Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 36/44] hw/misc/edu: add msi_uninit() for pci_edu_uninit() Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 37/44] tpm: add a "ppi" boolean property Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 38/44] tpm: allocate/map buffer for TPM Physical Presence interface Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 39/44] acpi: expose TPM/PPI configuration parameters to firmware via fw_cfg Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 40/44] acpi: build TPM Physical Presence interface Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 41/44] acpi: add ACPI memory clear interface Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 42/44] tpm: clear RAM when "memory overwrite" requested Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 43/44] hw: acpi: Fix memory hotplug AML generation error Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 44/44] acpi: update expected files Michael S. Tsirkin
2019-01-15  5:38 ` [Qemu-devel] [PULL 00/44] pci, pc, virtio: fixes, features Peter Xu
2019-01-15 12:49   ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190115003812.11329-11-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.