All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Ortiz <sameo@linux.intel.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
	qemu-arm@nongnu.org, Shannon Zhao <shannon.zhaosl@gmail.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Richard Henderson <rth@twiddle.net>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Ben Warren <ben@skyportsystems.com>,
	Thomas Huth <thuth@redhat.com>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 4/8] hw: arm: Carry RSDP specific data through AcpiRsdpData
Date: Tue, 27 Nov 2018 16:42:18 +0100	[thread overview]
Message-ID: <20181127154218.GA5677@caravaggio> (raw)
In-Reply-To: <20181127162551.29608eeb@redhat.com>

Hi Igor,

On Tue, Nov 27, 2018 at 04:25:51PM +0100, Igor Mammedov wrote:
> On Mon, 26 Nov 2018 17:29:37 +0100
> Samuel Ortiz <sameo@linux.intel.com> wrote:
> 
> > That will allow us to generalize the ARM build_rsdp() routine to support
> > both legacy RSDP (The current i386 implementation) and extended RSDP
> > (The ARM implementation).
> > 
> > Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
> > ---
> >  include/hw/acpi/acpi-defs.h | 11 +++++++++++
> >  hw/arm/virt-acpi-build.c    | 27 ++++++++++++++++++++++-----
> >  2 files changed, 33 insertions(+), 5 deletions(-)
> > 
> > diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h
> > index af8e023968..e7fd24c6c5 100644
> > --- a/include/hw/acpi/acpi-defs.h
> > +++ b/include/hw/acpi/acpi-defs.h
> > @@ -53,6 +53,17 @@ struct AcpiRsdpDescriptor {        /* Root System Descriptor Pointer */
> >  } QEMU_PACKED;
> >  typedef struct AcpiRsdpDescriptor AcpiRsdpDescriptor;
> >  
> > +typedef struct AcpiRsdpData {
> > +    uint8_t oem_id[6]; /* OEM identification */
> > +    uint8_t revision;  /* Must be 0 for 1.0, 2 for 2.0 */
> > +
> > +    unsigned *rsdt_tbl_offset;
> > +    unsigned *xsdt_tbl_offset;
> > +} AcpiRsdpData;
> > +
> 
> > +#define ACPI_RSDP_REV_1 0
> > +#define ACPI_RSDP_REV_2 2
> it's one time used spec defined values so just use values directly
> in place with a comment, so reader won't have to jump around code
> when comparing to spec.
It's also used in the ACPI tests fix patch.
Also the 0 for revision 1 is a little confusing, I feel the above
definition is clearer.


> > +
> >  /* Table structure from Linux kernel (the ACPI tables are under the
> >     BSD license) */
> >  
> > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> > index 0835900052..2dad465ecf 100644
> > --- a/hw/arm/virt-acpi-build.c
> > +++ b/hw/arm/virt-acpi-build.c
> > @@ -368,7 +368,7 @@ static void acpi_dsdt_add_power_button(Aml *scope)
> >  
> >  /* RSDP */
> >  static void
> > -build_rsdp(GArray *rsdp_table, BIOSLinker *linker, unsigned xsdt_tbl_offset)
> > +build_rsdp(GArray *rsdp_table, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
> >  {
> >      AcpiRsdpDescriptor *rsdp = acpi_data_push(rsdp_table, sizeof *rsdp);
> >      unsigned xsdt_pa_size = sizeof(rsdp->xsdt_physical_address);
> > @@ -379,14 +379,14 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker, unsigned xsdt_tbl_offset)
> >                               true /* fseg memory */);
> >  
> >      memcpy(&rsdp->signature, "RSD PTR ", sizeof(rsdp->signature));
> > -    memcpy(rsdp->oem_id, ACPI_BUILD_APPNAME6, sizeof(rsdp->oem_id));
> > +    memcpy(rsdp->oem_id, rsdp_data->oem_id, sizeof(rsdp->oem_id));
> >      rsdp->length = cpu_to_le32(sizeof(*rsdp));
> > -    rsdp->revision = 0x02;
> > +    rsdp->revision = rsdp_data->revision;
> >  
> >      /* Address to be filled by Guest linker */
> >      bios_linker_loader_add_pointer(linker,
> >          ACPI_BUILD_RSDP_FILE, xsdt_pa_offset, xsdt_pa_size,
> > -        ACPI_BUILD_TABLE_FILE, xsdt_tbl_offset);
> > +        ACPI_BUILD_TABLE_FILE, *rsdp_data->xsdt_tbl_offset);
> >  
> >      /* Checksum to be filled by Guest linker */
> >      bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> > @@ -399,6 +399,20 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker, unsigned xsdt_tbl_offset)
> >          (char *)&rsdp->extended_checksum - rsdp_table->data);
> >  }
> >  
> > +static void
> > +init_rsdp_data(AcpiRsdpData *data, const char *oem_id, uint8_t revision,
> > +               unsigned *rsdt_offset, unsigned *xsdt_offset)
> > +{
> > +    /* Caller must provide an OEM ID */
> > +    g_assert(oem_id);
> > +    g_assert(strlen(oem_id) >= 6);
> > +
> > +    memcpy(data->oem_id, oem_id, 6);
> > +    data->revision = revision;
> > +    data->rsdt_tbl_offset = rsdt_offset;
> > +    data->xsdt_tbl_offset = xsdt_offset;
> > +}
> > +
> >  static void
> >  build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> >  {
> > @@ -810,6 +824,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
> >      GArray *table_offsets;
> >      unsigned dsdt, xsdt;
> >      GArray *tables_blob = tables->table_data;
> > +    AcpiRsdpData rsdp;
> s/rsdp/rsdp_info/
> 
> >  
> >      table_offsets = g_array_new(false, true /* clear */,
> >                                          sizeof(uint32_t));
> > @@ -857,7 +872,9 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
> >      build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
> >  
> >      /* RSDP is in FSEG memory, so allocate it separately */
> > -    build_rsdp(tables->rsdp, tables->linker, xsdt);
> > +    init_rsdp_data(&rsdp, ACPI_BUILD_APPNAME6, ACPI_RSDP_REV_2,
> > +                   NULL, &xsdt);
> It would be more concise to use declarative style without extra clutter:
> 
> -    init_rsdp_data(&rsdp, ACPI_BUILD_APPNAME6, ACPI_RSDP_REV_2,
> -                   NULL, &xsdt);
> -    build_rsdp(tables->rsdp, tables->linker, &rsdp);
> +    {
> +       AcpiRsdpData rsdp = {
> +           .revision = 2,
> +           .oem_id = ACPI_BUILD_APPNAME6,
> +           .xsdt_tbl_offset = &xsdt,
> +           .rsdt_tbl_offset = NULL,
> +       };
> +       build_rsdp(tables->rsdp, tables->linker, &rsdp);
> +    }
2 things here, imo:

- This is not more concise.
- It's code duplication as almost the same snippet is going to be used
  for i386/acpi-build.c

Cheers,
Samuel.

  reply	other threads:[~2018-11-27 15:43 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-26 16:29 [Qemu-devel] [PATCH 0/8] hw: acpi: RSDP fixes and refactoring Samuel Ortiz
2018-11-26 16:29 ` [Qemu-devel] [PATCH 1/8] hw: acpi: The RSDP build API can return void Samuel Ortiz
2018-11-26 17:07   ` Philippe Mathieu-Daudé
2018-11-27 14:15   ` Thomas Huth
2018-11-26 16:29 ` [Qemu-devel] [PATCH 2/8] hw: arm: acpi: Fix incorrect checksums in RSDP Samuel Ortiz
2018-11-27 14:50   ` Igor Mammedov
2018-11-26 16:29 ` [Qemu-devel] [PATCH 3/8] hw: i386: Use correct RSDT length for checksum Samuel Ortiz
2018-11-26 16:29 ` [Qemu-devel] [PATCH 4/8] hw: arm: Carry RSDP specific data through AcpiRsdpData Samuel Ortiz
2018-11-26 17:42   ` Philippe Mathieu-Daudé
2018-11-27 15:25   ` Igor Mammedov
2018-11-27 15:42     ` Samuel Ortiz [this message]
2018-11-27 16:27       ` Igor Mammedov
2018-11-28  3:26         ` Michael S. Tsirkin
2018-11-28 10:05           ` Samuel Ortiz
2018-11-28  9:46         ` Samuel Ortiz
2018-11-28 10:16           ` Samuel Ortiz
2018-11-28 12:12           ` Igor Mammedov
2018-11-26 16:29 ` [Qemu-devel] [PATCH 5/8] hw: arm: Convert the RSDP build to the buid_append_foo() API Samuel Ortiz
2018-11-27 15:51   ` Igor Mammedov
2018-11-26 16:29 ` [Qemu-devel] [PATCH 6/8] hw: arm: Support both legacy and current RSDP build Samuel Ortiz
2018-11-27 16:38   ` Igor Mammedov
2018-11-26 16:29 ` [Qemu-devel] [PATCH 7/8] hw: acpi: Export and share the ARM " Samuel Ortiz
2018-11-26 17:19   ` Philippe Mathieu-Daudé
2018-11-26 16:29 ` [Qemu-devel] [PATCH 8/8] hw: acpi: Remove AcpiRsdpDescriptor and fix tests Samuel Ortiz
2018-11-28  9:50   ` Igor Mammedov

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=20181127154218.GA5677@caravaggio \
    --to=sameo@linux.intel.com \
    --cc=ben@skyportsystems.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=shannon.zhaosl@gmail.com \
    --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.