diff -r ec2ab25dacee xen/arch/ia64/xen/process.c --- a/xen/arch/ia64/xen/process.c Thu Nov 17 10:32:22 2005 -0600 +++ b/xen/arch/ia64/xen/process.c Fri Nov 18 19:50:53 2005 +1100 @@ -698,15 +698,9 @@ IA64FAULT vector; struct domain *d = current->domain; struct vcpu *v = current; - // FIXME: no need to pass itir in to this routine as we need to - // compute the virtual itir anyway (based on domain's RR.ps) - // AND ACTUALLY reflect_interruption doesn't use it anyway! vector = priv_emulate(current,regs,isr); - if (vector != IA64_NO_FAULT && vector != IA64_RFI_IN_PROGRESS) { - PSCB(current,itir) = - vcpu_get_itir_on_fault(v,PSCB(current,ifa)); + if (vector != IA64_NO_FAULT && vector != IA64_RFI_IN_PROGRESS) reflect_interruption(isr,regs,vector); - } } #define INTR_TYPE_MAX 10 diff -r ec2ab25dacee xen/arch/ia64/xen/vcpu.c --- a/xen/arch/ia64/xen/vcpu.c Thu Nov 17 10:32:22 2005 -0600 +++ b/xen/arch/ia64/xen/vcpu.c Fri Nov 18 19:50:53 2005 +1100 @@ -1185,7 +1185,9 @@ IA64FAULT vcpu_force_data_miss(VCPU *vcpu, UINT64 ifa) { PSCB(vcpu,ifa) = ifa; + PSCB(vcpu,itir) = vcpu_get_itir_on_fault(vcpu,ifa); + vcpu_thash(current, ifa, &PSCB(current,iha)); return (vcpu_get_rr_ve(vcpu,ifa) ? IA64_DATA_TLB_VECTOR : IA64_ALT_DATA_TLB_VECTOR); }