|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/PVH/libxl: Check whether Linux guest can handle RSDP at 4G boundary
commit aaae6290965b1434ae41e08b808bf5a59e6cf93e
Author: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
AuthorDate: Mon Apr 9 10:24:59 2018 -0400
Commit: Wei Liu <wei.liu2@xxxxxxxxxx>
CommitDate: Mon Apr 9 18:18:00 2018 +0100
x86/PVH/libxl: Check whether Linux guest can handle RSDP at 4G boundary
Commit 4a5733771e6f ("libxl: put RSDP for PVH guest near 4GB") breaks
pre-4.17 Linux guests since they do not use start_info's rsdp_paddr
pointer and instread scan BIOS memory for RSDP signature.
Introduce XENFEAT_linux_rsdp_unrestricted feature flag that indicates
whether the guest can handle RSDP at locations pointed to by
rsdp_paddr.
Since only Linux PVH guests suffer from this problem (BSD has always
relied on rsdp_paddr) we check this flag just for those guests. If the
flag is not set we place RSDP in BIOS, as before.
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
Release-acked-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Acked-by: George Dunlap <george.dunlap@xxxxxxxxxx>
Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
tools/libxl/libxl_x86_acpi.c | 14 ++++++++++++--
xen/include/public/features.h | 9 +++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/tools/libxl/libxl_x86_acpi.c b/tools/libxl/libxl_x86_acpi.c
index fe87418bc1..143ce66644 100644
--- a/tools/libxl/libxl_x86_acpi.c
+++ b/tools/libxl/libxl_x86_acpi.c
@@ -218,8 +218,18 @@ int libxl__dom_load_acpi(libxl__gc *gc,
dom->acpi_modules[0].data = (void *)config.rsdp;
dom->acpi_modules[0].length = 64;
- dom->acpi_modules[0].guest_addr_out = ACPI_INFO_PHYSICAL_ADDRESS +
- (1 + acpi_pages_num) * libxl_ctxt.page_size;
+ /*
+ * Some Linux versions cannot properly process hvm_start_info.rsdp_paddr
+ * and so we need to put RSDP in location that can be discovered by ACPI's
+ * standard search method, in R-O BIOS memory (we chose last 64 bytes)
+ */
+ if (strcmp(dom->parms.guest_os, "linux") ||
+ elf_xen_feature_get(XENFEAT_linux_rsdp_unrestricted,
+ dom->parms.f_supported))
+ dom->acpi_modules[0].guest_addr_out = ACPI_INFO_PHYSICAL_ADDRESS +
+ (1 + acpi_pages_num) * libxl_ctxt.page_size;
+ else
+ dom->acpi_modules[0].guest_addr_out = 0x100000 - 64;
dom->acpi_modules[1].data = (void *)config.infop;
dom->acpi_modules[1].length = 4096;
diff --git a/xen/include/public/features.h b/xen/include/public/features.h
index 1a989b8bf9..443e6eca53 100644
--- a/xen/include/public/features.h
+++ b/xen/include/public/features.h
@@ -105,6 +105,15 @@
/* arm: Hypervisor supports ARM SMC calling convention. */
#define XENFEAT_ARM_SMCCC_supported 14
+/*
+ * x86/PVH: If set, ACPI RSDP can be placed at any address. Otherwise RSDP
+ * must be located in lower 1MB, as required by ACPI Specification for IA-PC
+ * systems.
+ * This feature flag is only consulted if XEN_ELFNOTE_GUEST_OS contains
+ * the "linux" string.
+ */
+#define XENFEAT_linux_rsdp_unrestricted 15
+
#define XENFEAT_NR_SUBMAPS 1
#endif /* __XEN_PUBLIC_FEATURES_H__ */
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |