From: Juergen Gross Date: Tue, 21 Nov 2017 11:06:06 +0000 (+0100) Subject: tools/libxl: mark special pages as reserved in e820 map for PVH X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~585 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1a42ffa3476ab433da9dc27c6d36f051b70592ed;p=xen.git tools/libxl: mark special pages as reserved in e820 map for PVH The "special pages" for PVH guests include the frames for console and Xenstore ring buffers. Those have to be marked as "Reserved" in the guest's E820 map, as otherwise conflicts might arise later e.g. when hotplugging memory into the guest. Signed-off-by: Juergen Gross Reviewed-by: Roger Pau Monné Acked-by: Wei Liu --- diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c index 5f91fe4f92..d82013f6ed 100644 --- a/tools/libxl/libxl_x86.c +++ b/tools/libxl/libxl_x86.c @@ -530,6 +530,9 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc, if (d_config->rdms[i].policy != LIBXL_RDM_RESERVE_POLICY_INVALID) e820_entries++; + /* Add mmio entry for PVH. */ + if (dom->mmio_size && d_config->b_info.type == LIBXL_DOMAIN_TYPE_PVH) + e820_entries++; /* If we should have a highmem range. */ if (highmem_size) @@ -564,6 +567,14 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc, nr++; } + /* mmio area */ + if (dom->mmio_size && d_config->b_info.type == LIBXL_DOMAIN_TYPE_PVH) { + e820[nr].addr = dom->mmio_start; + e820[nr].size = dom->mmio_size; + e820[nr].type = E820_RESERVED; + nr++; + } + 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);