[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] tools/init-xenstore-domain: fix memory map for PVH stubdom
In case of maxmem != memsize the E820 map of the PVH stubdom is wrong, as it is missing the RAM above memsize. Additionally the MMIO area should only cover the HVM special pages. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/helpers/init-xenstore-domain.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c index b4f3c65a8a..dad8e43c42 100644 --- a/tools/helpers/init-xenstore-domain.c +++ b/tools/helpers/init-xenstore-domain.c @@ -71,8 +71,9 @@ static int build(xc_interface *xch) char cmdline[512]; int rv, xs_fd; struct xc_dom_image *dom = NULL; - int limit_kb = (maxmem ? : (memory + 1)) * 1024; + int limit_kb = (maxmem ? : memory) * 1024 + X86_HVM_NR_SPECIAL_PAGES * 4; uint64_t mem_size = MB(memory); + uint64_t max_size = MB(maxmem); struct e820entry e820[3]; struct xen_domctl_createdomain config = { .ssidref = SECINITSID_DOMU, @@ -157,21 +158,24 @@ static int build(xc_interface *xch) config.flags |= XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap; config.arch.emulation_flags = XEN_X86_EMU_LAPIC; dom->target_pages = mem_size >> XC_PAGE_SHIFT; - dom->mmio_size = GB(4) - LAPIC_BASE_ADDRESS; + dom->mmio_size = X86_HVM_NR_SPECIAL_PAGES << XC_PAGE_SHIFT; dom->lowmem_end = (mem_size > LAPIC_BASE_ADDRESS) ? LAPIC_BASE_ADDRESS : mem_size; dom->highmem_end = (mem_size > LAPIC_BASE_ADDRESS) ? GB(4) + mem_size - LAPIC_BASE_ADDRESS : 0; - dom->mmio_start = LAPIC_BASE_ADDRESS; + dom->mmio_start = (X86_HVM_END_SPECIAL_REGION - + X86_HVM_NR_SPECIAL_PAGES) << XC_PAGE_SHIFT; dom->max_vcpus = 1; e820[0].addr = 0; - e820[0].size = dom->lowmem_end; + e820[0].size = (max_size > LAPIC_BASE_ADDRESS) ? + LAPIC_BASE_ADDRESS : max_size; e820[0].type = E820_RAM; - e820[1].addr = LAPIC_BASE_ADDRESS; + e820[1].addr = dom->mmio_start; e820[1].size = dom->mmio_size; e820[1].type = E820_RESERVED; e820[2].addr = GB(4); - e820[2].size = dom->highmem_end - GB(4); + e820[2].size = (max_size > LAPIC_BASE_ADDRESS) ? + max_size - LAPIC_BASE_ADDRESS : 0; e820[2].type = E820_RAM; } -- 2.35.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |