Index: 2006-06-29/linux-2.6-xen-sparse/arch/i386/mm/hypervisor.c =================================================================== --- 2006-06-29.orig/linux-2.6-xen-sparse/arch/i386/mm/hypervisor.c 2006-06-29 15:32:35.000000000 +0200 +++ 2006-06-29/linux-2.6-xen-sparse/arch/i386/mm/hypervisor.c 2006-06-29 15:33:10.000000000 +0200 @@ -350,12 +350,13 @@ int xen_create_contiguous_region( if (HYPERVISOR_update_va_mapping(vstart + (i*PAGE_SIZE), pfn_pte_ma(frame, PAGE_KERNEL), - 0)) + order ? 0 : UVMF_INVLPG|UVMF_ALL)) BUG(); set_phys_to_machine((__pa(vstart)>>PAGE_SHIFT)+i, frame); } - flush_tlb_all(); + if (order) + flush_tlb_all(); if (success) contiguous_bitmap_set(__pa(vstart) >> PAGE_SHIFT, @@ -439,12 +440,13 @@ void xen_destroy_contiguous_region(unsig if (HYPERVISOR_update_va_mapping(vstart + (i*PAGE_SIZE), pfn_pte_ma(frame, PAGE_KERNEL), - 0)) + order ? 0 : UVMF_INVLPG|UVMF_ALL)) BUG(); set_phys_to_machine((__pa(vstart)>>PAGE_SHIFT)+i, frame); } - flush_tlb_all(); + if (order) + flush_tlb_all(); balloon_unlock(flags);