diff options
Diffstat (limited to 'xen/arch/x86/x86_64/mm.c')
-rw-r--r-- | xen/arch/x86/x86_64/mm.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index 96a033bf88..d1a1c02855 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -621,25 +621,20 @@ void __init paging_init(void) * We setup the L3s for 1:1 mapping if host support memory hotplug * to avoid sync the 1:1 mapping on page fault handler */ - if ( mem_hotplug ) + for ( va = DIRECTMAP_VIRT_START; + va < DIRECTMAP_VIRT_END && (void *)va < __va(mem_hotplug); + va += (1UL << L4_PAGETABLE_SHIFT) ) { - unsigned long va; - - for ( va = DIRECTMAP_VIRT_START; - va < DIRECTMAP_VIRT_END; - va += (1UL << L4_PAGETABLE_SHIFT) ) + if ( !(l4e_get_flags(idle_pg_table[l4_table_offset(va)]) & + _PAGE_PRESENT) ) { - if ( !(l4e_get_flags(idle_pg_table[l4_table_offset(va)]) & - _PAGE_PRESENT) ) - { - l3_pg = alloc_domheap_page(NULL, 0); - if ( !l3_pg ) - goto nomem; - l3_ro_mpt = page_to_virt(l3_pg); - clear_page(l3_ro_mpt); - l4e_write(&idle_pg_table[l4_table_offset(va)], - l4e_from_page(l3_pg, __PAGE_HYPERVISOR)); - } + l3_pg = alloc_domheap_page(NULL, 0); + if ( !l3_pg ) + goto nomem; + l3_ro_mpt = page_to_virt(l3_pg); + clear_page(l3_ro_mpt); + l4e_write(&idle_pg_table[l4_table_offset(va)], + l4e_from_page(l3_pg, __PAGE_HYPERVISOR)); } } |