From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Gabriel L. Somlo" <gsomlo@gmail.com>
Cc: pbonzini@redhat.com, lersek@redhat.com, qemu-devel@nongnu.org,
kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 0/3] SMBIOS cleanup round
Date: Fri, 23 May 2014 12:00:12 +0300 [thread overview]
Message-ID: <20140523090012.GA11815@redhat.com> (raw)
In-Reply-To: <20140523012711.GA6121@crash.ini.cmu.edu>
On Thu, May 22, 2014 at 09:27:11PM -0400, Gabriel L. Somlo wrote:
> Michael,
>
> On Mon, May 19, 2014 at 10:44:48PM +0300, Michael S. Tsirkin wrote:
> > One question: we don't seem to have unit-test for this
> > interface in qemu, do we?
> > I would like to see at least a basic test along the lines of
> > tests/acpi-test.c: run bios to load tables from QEMU,
> > then do some basic checks on the tables that bios loaded.
>
> So I took a closer look at tests/acpi-test.c today, and things slowly
> started to shift into focus :) So now I have two questions:
>
> 1. There's a fairly complex setup (create a boot disk, start the
> guest, loop around waiting for the bios to finish booting, watch
> when your disk-based boot loader runs, etc.) before starting to
> examine the guest memory for the presence and correctness of the acpi
> tables.
>
> Would it make sense to rename this file to something like e.g.
> tests/biostables-test.c, and add checks for smbios to the already
> started and booted guest ?
>
> If not, I'd have to replicate most of your test-harness code,
> which is almost half of acpi-test.c. That shouldn't be hard (you
> already did the heavy lifting on that one), but I intuitively dislike
> multiple cut'n'paste clones of significant code fragments :)
Sure, fine.
> 2. Assuming we can run smbios tests alongside acpi, what do you think
> of the patch below ? I've currently stopped after finding and checking
> the integrity of the smbios entry point structure. Not sure if I
> really need to walk the tables themselves, or what I'd be testing for
> if I did :)
>
> Feedback/comments/flames welcome ! :)
>
> Thanks much,
> --Gabriel
Looks good to me.
>
> diff --git a/tests/acpi-test.c b/tests/acpi-test.c
> index 76fbccf..66cde26 100644
> --- a/tests/acpi-test.c
> +++ b/tests/acpi-test.c
> @@ -18,6 +18,7 @@
> #include "libqtest.h"
> #include "qemu/compiler.h"
> #include "hw/i386/acpi-defs.h"
> +#include "hw/i386/smbios.h"
>
> #define MACHINE_PC "pc"
> #define MACHINE_Q35 "q35"
> @@ -46,6 +47,8 @@ typedef struct {
> uint32_t *rsdt_tables_addr;
> int rsdt_tables_nr;
> GArray *tables;
> + uint32_t smbios_ep_addr;
> + struct smbios_entry_point smbios_ep_table;
> } test_data;
>
> #define LOW(x) ((x) & 0xff)
> @@ -220,6 +223,28 @@ static void test_acpi_rsdp_address(test_data *data)
> data->rsdp_addr = off;
> }
>
> +static void test_smbios_ep_address(test_data *data)
> +{
> + uint32_t off;
> +
> + /* find smbios entry point structure */
> + for (off = 0xf0000; off < 0x100000; off += 0x10) {
> + uint8_t sig[] = "_SM_";
> + int i;
> +
> + for (i = 0; i < sizeof sig - 1; ++i) {
> + sig[i] = readb(off + i);
> + }
> +
> + if (!memcmp(sig, "_SM_", sizeof sig)) {
> + break;
> + }
> + }
> +
> + g_assert_cmphex(off, <, 0x100000);
> + data->smbios_ep_addr = off;
> +}
> +
> static void test_acpi_rsdp_table(test_data *data)
> {
> AcpiRsdpDescriptor *rsdp_table = &data->rsdp_table;
> @@ -238,6 +263,34 @@ static void test_acpi_rsdp_table(test_data *data)
> g_assert(!acpi_checksum((uint8_t *)rsdp_table, 20));
> }
>
> +static void test_smbios_ep_table(test_data *data)
> +{
> + struct smbios_entry_point *ep_table = &data->smbios_ep_table;
> + uint32_t addr = data->smbios_ep_addr;
> +
> + ACPI_READ_ARRAY(ep_table->anchor_string, addr);
> + g_assert(!memcmp(ep_table->anchor_string, "_SM_", 4));
> + ACPI_READ_FIELD(ep_table->checksum, addr);
> + ACPI_READ_FIELD(ep_table->length, addr);
> + ACPI_READ_FIELD(ep_table->smbios_major_version, addr);
> + ACPI_READ_FIELD(ep_table->smbios_minor_version, addr);
> + ACPI_READ_FIELD(ep_table->max_structure_size, addr);
> + ACPI_READ_FIELD(ep_table->entry_point_revision, addr);
> + ACPI_READ_ARRAY(ep_table->formatted_area, addr);
> + ACPI_READ_ARRAY(ep_table->intermediate_anchor_string, addr);
> + g_assert(!memcmp(ep_table->intermediate_anchor_string, "_DMI_", 5));
> + ACPI_READ_FIELD(ep_table->intermediate_checksum, addr);
> + ACPI_READ_FIELD(ep_table->structure_table_length, addr);
> + g_assert_cmpuint(ep_table->structure_table_length, >, 0);
> + ACPI_READ_FIELD(ep_table->structure_table_address, addr);
> + ACPI_READ_FIELD(ep_table->number_of_structures, addr);
> + g_assert_cmpuint(ep_table->number_of_structures, >, 0);
> + ACPI_READ_FIELD(ep_table->smbios_bcd_revision, addr);
> + g_assert(!acpi_checksum((uint8_t *)ep_table, sizeof *ep_table));
> + g_assert(!acpi_checksum((uint8_t *)ep_table + 0x10,
> + sizeof *ep_table - 0x10));
> +}
> +
> static void test_acpi_rsdt_table(test_data *data)
> {
> AcpiRsdtDescriptorRev1 *rsdt_table = &data->rsdt_table;
> @@ -633,6 +686,9 @@ static void test_acpi_one(const char *params, test_data *data)
> }
> }
>
> + test_smbios_ep_address(data);
> + test_smbios_ep_table(data);
> +
> qtest_quit(global_qtest);
> g_free(args);
> }
next prev parent reply other threads:[~2014-05-23 9:01 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-19 14:09 [Qemu-devel] [PATCH v4 0/3] SMBIOS cleanup round Gabriel L. Somlo
2014-05-19 14:09 ` [Qemu-devel] [PATCH v4 1/3] SMBIOS: Fix endian-ness when populating multi-byte fields Gabriel L. Somlo
2014-05-19 14:09 ` [Qemu-devel] [PATCH v4 2/3] SMBIOS: Update Type 0 struct generator for machines >= 2.1 Gabriel L. Somlo
2014-05-19 14:09 ` [Qemu-devel] [PATCH v4 3/3] SMBIOS: Fix type 17 field sizes Gabriel L. Somlo
2014-05-19 16:09 ` [Qemu-devel] [PATCH v4 0/3] SMBIOS cleanup round Michael S. Tsirkin
2014-05-20 6:57 ` Gerd Hoffmann
2014-05-19 19:44 ` Michael S. Tsirkin
2014-05-20 19:01 ` Gabriel L. Somlo
2014-05-23 1:27 ` Gabriel L. Somlo
2014-05-23 9:00 ` Michael S. Tsirkin [this message]
2014-05-23 21:01 ` Gabriel L. Somlo
2014-05-26 6:30 ` Markus Armbruster
2014-06-02 17:13 ` [Qemu-devel] [PATCH v4 0/3, ping] " Gabriel L. Somlo
2014-06-02 20:02 ` Michael S. Tsirkin
2014-06-04 19:47 ` Michael S. Tsirkin
2014-06-04 20:02 ` Gabriel L. Somlo
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=20140523090012.GA11815@redhat.com \
--to=mst@redhat.com \
--cc=gsomlo@gmail.com \
--cc=kraxel@redhat.com \
--cc=lersek@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).