# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Node ID 82e605a2b508fb558085d955c672d8bffd5360a4 # Parent 51f93cc34bb6ba4136edb14855dc6711269d1b29 fix vmx_vcpu_ptr_d() and vmx_vcpu_ptr_i(). They must purge all tr registers which overlap. not only one. PATCHNAME: fix_vmx_vcpu_ptr Signed-off-by: Isaku Yamahata diff -r 51f93cc34bb6 -r 82e605a2b508 xen/arch/ia64/vmx/vmmu.c --- a/xen/arch/ia64/vmx/vmmu.c Thu Jun 01 11:39:08 2006 +0900 +++ b/xen/arch/ia64/vmx/vmmu.c Thu Jun 01 11:41:22 2006 +0900 @@ -456,8 +456,7 @@ IA64FAULT vmx_vcpu_ptr_d(VCPU *vcpu,UINT u64 va; va = PAGEALIGN(ifa, ps); - index = vtr_find_overlap(vcpu, va, ps, DSIDE_TLB); - if (index>=0) { + while ((index = vtr_find_overlap(vcpu, va, ps, DSIDE_TLB)) >= 0) { vcpu->arch.dtrs[index].pte.p=0; } thash_purge_entries(vcpu, va, ps); @@ -470,8 +469,7 @@ IA64FAULT vmx_vcpu_ptr_i(VCPU *vcpu,UINT u64 va; va = PAGEALIGN(ifa, ps); - index = vtr_find_overlap(vcpu, va, ps, ISIDE_TLB); - if (index>=0) { + while ((index = vtr_find_overlap(vcpu, va, ps, ISIDE_TLB)) >= 0) { vcpu->arch.itrs[index].pte.p=0; } thash_purge_entries(vcpu, va, ps);