diff -r ce4768a78051 xen/arch/x86/mm/hap/nested_hap.c --- a/xen/arch/x86/mm/hap/nested_hap.c Mon Aug 08 11:36:21 2011 +0200 +++ b/xen/arch/x86/mm/hap/nested_hap.c Thu Aug 18 11:54:17 2011 +0200 @@ -86,8 +86,10 @@ nestedp2m_write_p2m_entry(struct p2m_dom old_flags = l1e_get_flags(*p); safe_write_pte(p, new); - if (old_flags & _PAGE_PRESENT) - nestedhvm_vmcx_flushtlb(p2m); + + if ( (old_flags & _PAGE_PRESENT) + && (level == 1 || (level == 2 && (old_flags & _PAGE_PSE))) ) + flush_tlb_mask(&p2m->p2m_dirty_cpumask); paging_unlock(d); } diff -r ce4768a78051 xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Mon Aug 08 11:36:21 2011 +0200 +++ b/xen/arch/x86/mm/p2m.c Thu Aug 18 11:54:17 2011 +0200 @@ -1164,7 +1164,6 @@ p2m_get_nestedp2m(struct vcpu *v, uint64 p2m->cr3 = cr3; nv->nv_flushp2m = 0; hvm_asid_flush_vcpu(v); - nestedhvm_vmcx_flushtlb(p2m); cpu_set(v->processor, p2m->p2m_dirty_cpumask); p2m_unlock(p2m); nestedp2m_unlock(d);