From aced70a211bb3233ac024ac991ca3a470d9f9294 Mon Sep 17 00:00:00 2001 From: Boris Ostrovsky Date: Thu, 9 Nov 2017 10:37:53 -0500 Subject: [PATCH] x86/pvh: Do not add DSDT and FACS to PVH dom0 XSDT MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit These tables are pointed to from FADT. Adding them will result in duplicate entries in the guest's tables. Signed-off-by: Boris Ostrovsky Reviewed-by: Jan Beulich Reviewed-by: Roger Pau Monné --- xen/arch/x86/hvm/dom0_build.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c index a67071c739..4338965bf6 100644 --- a/xen/arch/x86/hvm/dom0_build.c +++ b/xen/arch/x86/hvm/dom0_build.c @@ -818,6 +818,17 @@ static bool __init pvh_acpi_table_allowed(const char *sig) return true; } +static bool __init pvh_acpi_xsdt_table_allowed(const char *sig) +{ + /* + * DSDT and FACS are pointed to from FADT and thus don't belong + * in XSDT. + */ + return (pvh_acpi_table_allowed(sig) && + strncmp(sig, ACPI_SIG_DSDT, ACPI_NAME_SIZE) && + strncmp(sig, ACPI_SIG_FACS, ACPI_NAME_SIZE)); +} + static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, paddr_t *addr) { @@ -841,7 +852,7 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, { const char *sig = acpi_gbl_root_table_list.tables[i].signature.ascii; - if ( pvh_acpi_table_allowed(sig) ) + if ( pvh_acpi_xsdt_table_allowed(sig) ) num_tables++; } @@ -888,7 +899,7 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, { const char *sig = acpi_gbl_root_table_list.tables[i].signature.ascii; - if ( pvh_acpi_table_allowed(sig) ) + if ( pvh_acpi_xsdt_table_allowed(sig) ) xsdt->table_offset_entry[j++] = acpi_gbl_root_table_list.tables[i].address; } -- 2.30.2