diff -r 0e45a2e91f17 xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Thu May 12 14:35:58 2011 +0200 +++ b/xen/arch/x86/hvm/svm/svm.c Wed May 18 17:26:16 2011 +0200 @@ -450,7 +452,19 @@ static void svm_update_guest_cr(struct v break; case 3: vmcb_set_cr3(vmcb, v->arch.hvm_vcpu.hw_cr[3]); - hvm_asid_flush_vcpu(v); + if ( !nestedhvm_enabled(v->domain) ) { + hvm_asid_flush_vcpu(v); + break; + } + if ( nestedhvm_vmswitch_in_progress(v) ) + /* During VMRUN/VMEXIT emulation we toggle between + * n1asid and n2asid. */ + break; + + if ( nestedhvm_vcpu_in_guestmode(v) ) + hvm_asid_flush_vcpu_asid(&vcpu_nestedhvm(v).nv_n2asid); + else + hvm_asid_flush_vcpu_asid(&v->arch.hvm_vcpu.n1asid); break; case 4: value = HVM_CR4_HOST_MASK;