diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index d02dc4bfbf..cb287f0698 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -1533,7 +1533,7 @@ int __init construct_dom0( /* The hardware domain is initially permitted full I/O capabilities. */ rc |= ioports_permit_access(d, 0, 0xFFFF); - rc |= iomem_permit_access(d, 0UL, ~0UL); + rc |= iomem_permit_access(d, 0UL, (1UL << (paddr_bits - PAGE_SHIFT)) - 1); rc |= irqs_permit_access(d, 1, nr_irqs_gsi - 1); /* diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index fcf6577dbb..83f82b87be 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4604,7 +4604,7 @@ struct memory_map_context static int _handle_iomem_range(unsigned long s, unsigned long e, struct memory_map_context *ctxt) { - if ( s > ctxt->s ) + if ( s > ctxt->s && !(s >> (paddr_bits - PAGE_SHIFT)) ) { e820entry_t ent; XEN_GUEST_HANDLE_PARAM(e820entry_t) buffer_param;