ia64/xen-unstable

changeset 10239:34455164dd33

[IA64] fix vmx_vcpu_ptr_i(), vmx_vcpu_ptr_d()

They must purge all tr registers which overlap. not only one.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
author awilliam@xenbuild.aw
date Sat Jun 03 13:21:14 2006 -0600 (2006-06-03)
parents b27139d8c1e1
children f3be4eb8dac9
files xen/arch/ia64/vmx/vmmu.c
line diff
     1.1 --- a/xen/arch/ia64/vmx/vmmu.c	Sat Jun 03 11:16:47 2006 -0600
     1.2 +++ b/xen/arch/ia64/vmx/vmmu.c	Sat Jun 03 13:21:14 2006 -0600
     1.3 @@ -456,8 +456,7 @@ IA64FAULT vmx_vcpu_ptr_d(VCPU *vcpu,UINT
     1.4      u64 va;
     1.5  
     1.6      va = PAGEALIGN(ifa, ps);
     1.7 -    index = vtr_find_overlap(vcpu, va, ps, DSIDE_TLB);
     1.8 -    if (index>=0) {
     1.9 +    while ((index = vtr_find_overlap(vcpu, va, ps, DSIDE_TLB)) >= 0) {
    1.10          vcpu->arch.dtrs[index].pte.p=0;
    1.11      }
    1.12      thash_purge_entries(vcpu, va, ps);
    1.13 @@ -470,8 +469,7 @@ IA64FAULT vmx_vcpu_ptr_i(VCPU *vcpu,UINT
    1.14      u64 va;
    1.15  
    1.16      va = PAGEALIGN(ifa, ps);
    1.17 -    index = vtr_find_overlap(vcpu, va, ps, ISIDE_TLB);
    1.18 -    if (index>=0) {
    1.19 +    while ((index = vtr_find_overlap(vcpu, va, ps, ISIDE_TLB)) >= 0) {
    1.20          vcpu->arch.itrs[index].pte.p=0;
    1.21      }
    1.22      thash_purge_entries(vcpu, va, ps);