From: Igor Mammedov <imammedo@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>,
qemu-devel@nongnu.org, Shannon Zhao <shannon.zhaosl@gmail.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Anthony Perard <anthony.perard@citrix.com>,
Richard Henderson <rth@twiddle.net>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
xen-devel@lists.xenproject.org,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-arm@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5 05/24] hw: acpi: Implement XSDT support for RSDP
Date: Tue, 20 Nov 2018 09:23:18 +0100 [thread overview]
Message-ID: <20181120092318.48f69fa4@redhat.com> (raw)
In-Reply-To: <20181119131625-mutt-send-email-mst@kernel.org>
On Mon, 19 Nov 2018 13:27:14 -0500
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Thu, Nov 08, 2018 at 03:16:23PM +0100, Igor Mammedov wrote:
> > On Mon, 5 Nov 2018 02:40:28 +0100
> > Samuel Ortiz <sameo@linux.intel.com> wrote:
> >
> > > XSDT is the 64-bit version of the legacy ACPI RSDT (Root System
> > > Description Table). RSDT only allow for 32-bit addressses and have thus
> > > been deprecated. Since ACPI version 2.0, RSDPs should point at XSDTs and
> > > no longer RSDTs, although RSDTs are still supported for backward
> > > compatibility.
> > >
> > > Since version 2.0, RSDPs should add an extended checksum, a complete table
> > > length and a version field to the table.
> >
> > This patch re-implements what arm/virt board already does
> > and fixes checksum bug in the later and at the same time
> > without a user (within the patch).
> >
> > I'd suggest redo it a way similar to FADT refactoring
> > patch 1: fix checksum bug in virt/arm
> > patch 2: update reference tables in test
> > patch 3: introduce AcpiRsdpData similar to commit 937d1b587
> > (both arm and x86) wich stores all data in hos byte order
> > patch 4: convert arm's impl. to build_append_int_noprefix() API (commit 5d7a334f7)
> > ... move out to aml-build.c
> > patch 5: reuse generalized arm's build_rsdp() for x86, dropping x86 specific one
> > amending it to generate rev1 variant defined by revision in AcpiRsdpData
> > (commit dd1b2037a)
> >
> > 'make check V=1' shouldn't observe any ACPI tables changes after patch 2.
>
> And your next suggestion is to add patch 6. I guess it's doable but
> this will make a single patch a 6 patch series. At this rate this series
> will be at 200 patches easily.
>
> Automated checks are cool but hey it's easy to see what changed in a
> disassembled table, and we do not update them blindly. So just note in
> the comment that there's a table change for ARM and expected files need
> to be updated and we should be fine IMHO.
Point was to move patches that change tables content first,
where we would pay extra attentions to changes in tables and
then refactoring which shouldn't cause any changes will be mostly
automatic (at least at that point we won't have to worry about
tables correctness)
> > > Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
> > > ---
> > > include/hw/acpi/aml-build.h | 3 +++
> > > hw/acpi/aml-build.c | 37 +++++++++++++++++++++++++++++++++++++
> > > 2 files changed, 40 insertions(+)
> > >
> > > diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
> > > index c9bcb32d81..3580d0ce90 100644
> > > --- a/include/hw/acpi/aml-build.h
> > > +++ b/include/hw/acpi/aml-build.h
> > > @@ -393,6 +393,9 @@ void
> > > build_rsdp(GArray *table_data,
> > > BIOSLinker *linker, unsigned rsdt_tbl_offset);
> > > void
> > > +build_rsdp_xsdt(GArray *table_data,
> > > + BIOSLinker *linker, unsigned xsdt_tbl_offset);
> > > +void
> > > build_rsdt(GArray *table_data, BIOSLinker *linker, GArray *table_offsets,
> > > const char *oem_id, const char *oem_table_id);
> > > void
> > > diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> > > index 51b608432f..a030d40674 100644
> > > --- a/hw/acpi/aml-build.c
> > > +++ b/hw/acpi/aml-build.c
> > > @@ -1651,6 +1651,43 @@ build_xsdt(GArray *table_data, BIOSLinker *linker, GArray *table_offsets,
> > > (void *)xsdt, "XSDT", xsdt_len, 1, oem_id, oem_table_id);
> > > }
> > >
> > > +/* RSDP pointing at an XSDT */
> > > +void
> > > +build_rsdp_xsdt(GArray *rsdp_table,
> > > + BIOSLinker *linker, unsigned xsdt_tbl_offset)
> > > +{
> > > + AcpiRsdpDescriptor *rsdp = acpi_data_push(rsdp_table, sizeof *rsdp);
> > > + unsigned xsdt_pa_size = sizeof(rsdp->xsdt_physical_address);
> > > + unsigned xsdt_pa_offset =
> > > + (char *)&rsdp->xsdt_physical_address - rsdp_table->data;
> > > + unsigned xsdt_offset =
> > > + (char *)&rsdp->length - rsdp_table->data;
>
> There's a cleaner way to get at the offsets than pointer math:
> 1. save rsdp_table length before you push
> 2. add offset_of for fields
>
> If switching to build_append_int_noprefix then it's even
> easier - just save length before you append the int
> you intend to patch.
>
>
> > > +
> > > + bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, rsdp_table, 16,
> > > + true /* fseg memory */);
> > > +
> > > + memcpy(&rsdp->signature, "RSD PTR ", 8);
> > > + memcpy(rsdp->oem_id, ACPI_BUILD_APPNAME6, 6);
> > > + rsdp->length = cpu_to_le32(sizeof(*rsdp));
> > > + /* version 2, we will use the XSDT pointer */
> > > + rsdp->revision = 0x02;
> > > +
> > > + /* 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);
> > > +
> > > + /* Legacy checksum to be filled by Guest linker */
> > > + bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> > > + (char *)rsdp - rsdp_table->data, xsdt_offset,
> > > + (char *)&rsdp->checksum - rsdp_table->data);
> > > +
> > > + /* Extended checksum to be filled by Guest linker */
> > > + bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
> > > + (char *)rsdp - rsdp_table->data, sizeof *rsdp,
> > > + (char *)&rsdp->extended_checksum - rsdp_table->data);
> > > +}
> > > +
> > > void build_srat_memory(AcpiSratMemoryAffinity *numamem, uint64_t base,
> > > uint64_t len, int node, MemoryAffinityFlags flags)
> > > {
next prev parent reply other threads:[~2018-11-20 8:23 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-05 1:40 [Qemu-devel] [PATCH v5 00/24] ACPI reorganization for hardware-reduced API addition Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 01/24] hw: i386: Decouple the ACPI build from the PC machine type Samuel Ortiz
2018-11-09 14:23 ` Igor Mammedov
2018-11-21 14:42 ` Samuel Ortiz
2018-11-22 15:13 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 02/24] hw: acpi: Export ACPI build alignment API Samuel Ortiz
2018-11-09 14:27 ` Igor Mammedov
2018-11-21 14:42 ` Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 03/24] hw: acpi: The RSDP build API can return void Samuel Ortiz
2018-11-06 10:23 ` Paolo Bonzini
2018-11-06 10:43 ` Samuel Ortiz
2018-11-08 14:24 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 04/24] hw: acpi: Export the RSDP build API Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 05/24] hw: acpi: Implement XSDT support for RSDP Samuel Ortiz
2018-11-08 14:16 ` Igor Mammedov
2018-11-08 14:36 ` Samuel Ortiz
2018-11-08 14:53 ` Igor Mammedov
2018-11-19 18:27 ` Michael S. Tsirkin
2018-11-20 8:23 ` Igor Mammedov [this message]
2018-11-21 14:42 ` Samuel Ortiz
2018-11-22 16:26 ` Igor Mammedov
2018-11-23 9:36 ` Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 06/24] hw: acpi: Factorize the RSDP build API implementation Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 07/24] hw: acpi: Generalize AML build routines Samuel Ortiz
2018-11-09 13:37 ` Igor Mammedov
2018-11-21 15:00 ` Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 08/24] hw: acpi: Factorize _OSC AML across architectures Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 09/24] hw: i386: Move PCI host definitions to pci_host.h Samuel Ortiz
2018-11-09 14:30 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 10/24] hw: acpi: Export the PCI host and holes getters Samuel Ortiz
2018-11-13 15:59 ` Igor Mammedov
2018-11-21 15:43 ` Samuel Ortiz
2018-11-23 10:55 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 11/24] hw: acpi: Export and generalize the PCI host AML API Samuel Ortiz
2018-11-14 10:55 ` Igor Mammedov
2018-11-21 23:12 ` Samuel Ortiz
2018-11-23 11:04 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 12/24] hw: acpi: Export the MCFG getter Samuel Ortiz
2018-11-15 12:36 ` Igor Mammedov
2018-11-21 23:21 ` Samuel Ortiz
2018-11-27 13:54 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 13/24] hw: acpi: Do not create hotplug method when handler is not defined Samuel Ortiz
2018-11-09 9:12 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 14/24] hw: i386: Make the hotpluggable memory size property more generic Samuel Ortiz
2018-11-15 12:49 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 15/24] hw: i386: Export the i386 ACPI SRAT build method Samuel Ortiz
2018-11-15 13:28 ` Igor Mammedov
2018-11-21 23:27 ` Samuel Ortiz
2018-11-26 15:47 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 16/24] hw: acpi: Fix memory hotplug AML generation error Samuel Ortiz
2018-11-08 14:23 ` Igor Mammedov
2019-01-14 18:35 ` Michael S. Tsirkin
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 17/24] hw: acpi: Export the PCI hotplug API Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 18/24] hw: i386: Export the MADT build method Samuel Ortiz
2018-11-16 9:27 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 19/24] hw: acpi: Retrieve the PCI bus from AcpiPciHpState Samuel Ortiz
2018-11-16 9:39 ` Igor Mammedov
2018-11-16 19:42 ` Boeuf, Sebastien
2018-11-19 15:37 ` Igor Mammedov
2018-11-19 18:02 ` Boeuf, Sebastien
2018-11-20 8:26 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 20/24] hw: acpi: Define ACPI tables builder interface Samuel Ortiz
2018-11-16 16:02 ` Igor Mammedov
2018-11-21 23:57 ` Samuel Ortiz
2018-11-27 14:08 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 21/24] hw: i386: Implement the ACPI builder interface for PC Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 22/24] hw: pci-host: piix: Return PCI host pointer instead of PCI bus Samuel Ortiz
2018-11-16 11:09 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 23/24] hw: i386: Set ACPI configuration PCI host pointer Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 24/24] hw: i386: Refactor PCI host getter Samuel Ortiz
2018-11-16 16:29 ` [Qemu-devel] [PATCH v5 00/24] ACPI reorganization for hardware-reduced API addition Igor Mammedov
2018-11-16 16:37 ` Paolo Bonzini
2018-11-19 15:31 ` Igor Mammedov
2018-11-19 17:14 ` Paolo Bonzini
2018-11-19 18:14 ` Michael S. Tsirkin
2018-11-20 21:35 ` Paolo Bonzini
2018-11-20 12:57 ` Igor Mammedov
2018-11-20 21:36 ` Paolo Bonzini
2018-11-21 12:35 ` Michael S. Tsirkin
2018-11-21 13:50 ` Samuel Ortiz
2018-11-21 13:57 ` Michael S. Tsirkin
2018-11-21 14:15 ` Igor Mammedov
2018-11-21 14:38 ` Samuel Ortiz
2018-11-22 10:39 ` Igor Mammedov
2018-11-22 0:17 ` Samuel Ortiz
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=20181120092318.48f69fa4@redhat.com \
--to=imammedo@redhat.com \
--cc=anthony.perard@citrix.com \
--cc=ehabkost@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=sameo@linux.intel.com \
--cc=shannon.zhaosl@gmail.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.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).