From: Laszlo Ersek <lersek@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>, qemu-devel@nongnu.org
Cc: ghammer@redhat.com, pbonzini@redhat.com, shannon.zhao@linaro.org,
imammedo@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 0/4] acpi: xsdt support
Date: Tue, 09 Jun 2015 02:08:03 +0200 [thread overview]
Message-ID: <55762E63.7010606@redhat.com> (raw)
In-Reply-To: <1433787255-4372-1-git-send-email-mst@redhat.com>
On 06/08/15 20:14, Michael S. Tsirkin wrote:
> XSDT support allows using ACPI 2 features while
> avoiding breaking legacy windows XP guests:
> ACPI 2 tables are linked from XSDT only,
> ACPI 1 tables from both RSDT and XSDT, this way
> XP does not see ACPI 2 tables.
>
> As a first step, this patchset generates v2 RSDP
> and fills in XSDT matching RSDT exactly.
>
> ARM can switch to XSDT as well, I'm not bothering
> until there's an easy way to test that.
>
> Note: unit test files need to be updated with this,
> I'm not bothering with posting them.
>
> Changes from v1:
> xsdt address is 64 bit
> arm patch is now tested
>
> Michael S. Tsirkin (4):
> acpi: add API for 64 bit offsets
> i386/acpi: collect 64 bit offsets for xsdt
> i386/acpi: add XSDT
> acpi: unify rsdp generation
>
> include/hw/acpi/acpi-defs.h | 15 +++++--
> include/hw/acpi/aml-build.h | 7 +++-
> hw/acpi/aml-build.c | 99 +++++++++++++++++++++++++++++++++++++--------
> hw/arm/virt-acpi-build.c | 39 +++---------------
> hw/i386/acpi-build.c | 64 +++++++++++------------------
> 5 files changed, 129 insertions(+), 95 deletions(-)
>
I tested this series with ArmVirtQemu (aka AAVMF) and OVMF too. (They
use common code in edk2.)
The ARM build works indeed, but that's only because in patch #4 we have
build_rsdp(tables->rsdp, tables->linker, rsdt, 0);
ie. there's only an RSDT.
Due to patch #3 however, the OVMF client breaks:
build_rsdp(tables->rsdp, tables->linker, rsdt, xsdt);
The problem is that the "directed acyclic graph" of ADD_POINTER edges is
no longer a tree. At least some tables can be reached on multiple paths.
(Eg. the FADT can be reached via RSDP->RSDT-> FADT, and also
RSDP->XSDT->FADT.)
This is a problem because EFI_ACPI_TABLE_PROTOCOL has "builtin
knowledge" about what tables may not be installed only once vs. several
times. Unfortunately, in this case both decisions have bad consequences:
- When FADT is passed to EFI_ACPI_TABLE_PROTOCOL.InstallAcpiTable() for
the second time, the function returns EFI_ACCESS_DENIED, and the
linker/loader client bails out.
- When (eg.) the same SSDT is passed to
EFI_ACPI_TABLE_PROTOCOL.InstallAcpiTable() for the second time, the
function will happily install (a copy of) it again, and then we'll end
up with two copies of the same SSDT.
EFI_ACPI_TABLE_PROTOCOL manages both the RSDT and the XSDT internally.
As far as I can see, it puts each table in both. The RSDT and the XSDT
are not distinguished even on the UEFI spec level; it lumps them
together under "RSDT/XSDT" every time.
This is probably very frustrating; sorry about that.
Laszlo
next prev parent reply other threads:[~2015-06-09 0:08 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-08 18:14 [Qemu-devel] [PATCH v2 0/4] acpi: xsdt support Michael S. Tsirkin
2015-06-08 18:14 ` [Qemu-devel] [PATCH v2 1/4] acpi: add API for 64 bit offsets Michael S. Tsirkin
2015-06-08 18:14 ` [Qemu-devel] [PATCH v2 2/4] i386/acpi: collect 64 bit offsets for xsdt Michael S. Tsirkin
2015-06-08 18:14 ` [Qemu-devel] [PATCH v2 3/4] i386/acpi: add XSDT Michael S. Tsirkin
2015-06-08 18:14 ` [Qemu-devel] [PATCH v2 4/4] acpi: unify rsdp generation Michael S. Tsirkin
2015-06-09 0:08 ` Laszlo Ersek [this message]
2015-06-09 5:31 ` [Qemu-devel] [PATCH v2 0/4] acpi: xsdt support Michael S. Tsirkin
2015-06-09 6:02 ` Paolo Bonzini
2015-06-09 6:35 ` Michael S. Tsirkin
2015-06-09 6:38 ` Michael S. Tsirkin
2015-06-09 7:41 ` Laszlo Ersek
2015-06-09 8:34 ` Michael S. Tsirkin
2015-06-09 14:01 ` Laszlo Ersek
2015-06-09 9:39 ` Igor Mammedov
2015-06-09 9:10 ` Michael S. Tsirkin
2015-06-09 9:49 ` Michael S. Tsirkin
2015-06-09 14:02 ` Laszlo Ersek
2015-06-09 14:05 ` Michael S. Tsirkin
2015-08-27 14:27 ` Laszlo Ersek
2015-08-27 17:58 ` Michael S. Tsirkin
2015-08-28 6:23 ` Laszlo Ersek
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=55762E63.7010606@redhat.com \
--to=lersek@redhat.com \
--cc=ghammer@redhat.com \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=shannon.zhao@linaro.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 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.