[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3] xen/x86/pvh: handle ACPI RSDT table in PVH Dom0 build
Ping? I think this is a useful change, could we please have a new version with the proposed adjustments? Thanks, Roger. On Wed, Apr 24, 2024 at 03:18:26PM -0400, Daniel P. Smith wrote: > From: Stefano Stabellini <stefano.stabellini@xxxxxxx> > > Xen always generates as XSDT table even if the firmware provided an RSDT > table. > Copy the RSDT header from the firmware table, adjusting the signature, for the > XSDT table when not provided by the firmware. > > Fixes: 1d74282c455f ('x86: setup PVHv2 Dom0 ACPI tables') > Suggested-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx> > Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> > --- > > This patch is used for development and testing of hyperlaunch using the QEMU > emulator. After dicussiong with Stefano, he was okay with me addressing Jan's > comment regarding the table signature and reposting for acceptance. > > Changes in v3: > - ensure the constructed XSDT table always has the correct signature > > --- > xen/arch/x86/hvm/dom0_build.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c > index ac71d43a6b3f..781aac00fe72 100644 > --- a/xen/arch/x86/hvm/dom0_build.c > +++ b/xen/arch/x86/hvm/dom0_build.c > @@ -1077,7 +1077,16 @@ static int __init pvh_setup_acpi_xsdt(struct domain > *d, paddr_t madt_addr, > rc = -EINVAL; > goto out; > } > - xsdt_paddr = rsdp->xsdt_physical_address; > + /* > + * Note the header is the same for both RSDT and XSDT, so it's fine to > + * copy the native RSDT header to the Xen crafted XSDT if no native > + * XSDT is available. > + */ > + if ( rsdp->revision > 1 && rsdp->xsdt_physical_address ) > + xsdt_paddr = rsdp->xsdt_physical_address; > + else > + xsdt_paddr = rsdp->rsdt_physical_address; > + > acpi_os_unmap_memory(rsdp, sizeof(*rsdp)); > table = acpi_os_map_memory(xsdt_paddr, sizeof(*table)); > if ( !table ) > @@ -1089,6 +1098,9 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, > paddr_t madt_addr, > xsdt->header = *table; > acpi_os_unmap_memory(table, sizeof(*table)); > > + /* In case the header is an RSDT copy, blindly ensure it has an XSDT sig > */ > + xsdt->header.signature[0] = 'X'; > + > /* Add the custom MADT. */ > xsdt->table_offset_entry[0] = madt_addr; > > -- > 2.30.2 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |