diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index 57001443231e..9bb3d82ffec8 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -507,7 +507,7 @@ unsigned long get_phys_to_machine(unsigned long pfn) unsigned topidx, mididx, idx; if (unlikely(pfn >= MAX_P2M_PFN)) - return INVALID_P2M_ENTRY; + return IDENTITY_FRAME(pfn); topidx = p2m_top_index(pfn); mididx = p2m_mid_index(pfn); diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index 2afe55e21d59..210426a26cc0 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c @@ -468,6 +468,15 @@ char * __init xen_memory_setup(void) i++; } + /* + * Set the rest as identity mapped, in case PCI BARs are + * located here. + * + * PFNs above MAX_P2M_PFN are considered identity mapped as + * well. + */ + set_phys_range_identity(map[i-1].addr / PAGE_SIZE, ~0ul); + /* * In domU, the ISA region is normal, usable memory, but we * reserve ISA memory anyway because too many things poke