|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] tools: Mark ACPI SDTs as NVS in the PVH build path
commit d6dab805f1f8f233709b52d93fa879d6b91b5226
Author: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx>
AuthorDate: Tue Mar 18 09:44:18 2025 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Mar 18 09:44:18 2025 +0100
tools: Mark ACPI SDTs as NVS in the PVH build path
Commit cefeffc7e583 marked ACPI tables as NVS in the hvmloader path
because SeaBIOS may otherwise just mark it as RAM. There is, however,
yet another reason to do it even in the PVH path. Xen's incarnation of
AML relies on having access to some ACPI tables (e.g: _STA of Processor
objects relies on reading the processor online bit in its MADT entry)
This is problematic if the OS tries to reclaim ACPI memory for page
tables as it's needed for runtime and can't be reclaimed after the OSPM
is up and running.
Fixes: de6d188a519f ("hvmloader: flip "ACPI data" to "ACPI NVS" type for
ACPI table region)"
Signed-off-by: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
tools/firmware/hvmloader/e820.c | 4 ++++
tools/libs/light/libxl_x86.c | 12 +++++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/tools/firmware/hvmloader/e820.c b/tools/firmware/hvmloader/e820.c
index c490a0bc79..86d39544e8 100644
--- a/tools/firmware/hvmloader/e820.c
+++ b/tools/firmware/hvmloader/e820.c
@@ -210,6 +210,10 @@ int build_e820_table(struct e820entry *e820,
* space reuse by an ACPI unaware / buggy bootloader, option ROM, etc.
* before an ACPI OS takes control. This is possible due to the fact that
* ACPI NVS memory is explicitly described as non-reclaimable in ACPI spec.
+ *
+ * Furthermore, Xen relies on accessing ACPI tables from within the AML
+ * code exposed to guests. So Xen's ACPI tables are not, in general,
+ * reclaimable.
*/
if ( acpi_enabled )
diff --git a/tools/libs/light/libxl_x86.c b/tools/libs/light/libxl_x86.c
index 0a7f64ad46..0b1c2d3a96 100644
--- a/tools/libs/light/libxl_x86.c
+++ b/tools/libs/light/libxl_x86.c
@@ -737,12 +737,22 @@ static int domain_construct_memmap(libxl__gc *gc,
nr++;
}
+ /*
+ * Mark populated reserved memory that contains ACPI tables as ACPI NVS.
+ * That should help the guest to treat it correctly later: e.g. pass to
+ * the next kernel on kexec.
+ *
+ * Furthermore, Xen relies on accessing ACPI tables from within the AML
+ * code exposed to guests. So Xen's ACPI tables are not, in general,
+ * reclaimable.
+ */
+
for (i = 0; i < MAX_ACPI_MODULES; i++) {
if (dom->acpi_modules[i].length) {
e820[nr].addr = dom->acpi_modules[i].guest_addr_out & ~(page_size
- 1);
e820[nr].size = dom->acpi_modules[i].length +
(dom->acpi_modules[i].guest_addr_out & (page_size - 1));
- e820[nr].type = E820_ACPI;
+ e820[nr].type = E820_NVS;
nr++;
}
}
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |