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 26cb998b0c..84a2434da5 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -559,25 +559,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)); } } |