[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v4] xen/x86/pvh: handle ACPI RSDT table in PVH Dom0 build
Xen always generates as XSDT table even if the firmware only 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. This is necessary to run Xen on QEMU. 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> Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- Changes in v4: - improve commit message - improve in-code comment - add Roger's reviewed-by --- xen/arch/x86/hvm/dom0_build.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c index f3eddb6846..3dd913bdb0 100644 --- a/xen/arch/x86/hvm/dom0_build.c +++ b/xen/arch/x86/hvm/dom0_build.c @@ -1078,7 +1078,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 ) @@ -1090,6 +1099,12 @@ 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, unconditionally ensure it has + * an XSDT sig. + */ + xsdt->header.signature[0] = 'X'; + /* Add the custom MADT. */ xsdt->table_offset_entry[0] = madt_addr; -- 2.25.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |