ia64/xen-unstable

changeset 7741:14393678d999

Properly pass iha/itir if data miss occurs when fetching privop (by Matt Chapman)
author djm@kirby.fc.hp.com
date Fri Nov 18 10:58:03 2005 -0600 (2005-11-18)
parents ba78f3912b29
children 84f9bec4feaf
files xen/arch/ia64/xen/process.c xen/arch/ia64/xen/vcpu.c
line diff
     1.1 --- a/xen/arch/ia64/xen/process.c	Fri Nov 18 10:01:10 2005 -0600
     1.2 +++ b/xen/arch/ia64/xen/process.c	Fri Nov 18 10:58:03 2005 -0600
     1.3 @@ -698,13 +698,10 @@ ia64_handle_privop (unsigned long ifa, s
     1.4  	IA64FAULT vector;
     1.5  	struct domain *d = current->domain;
     1.6  	struct vcpu *v = current;
     1.7 -	// FIXME: no need to pass itir in to this routine as we need to
     1.8 -	// compute the virtual itir anyway (based on domain's RR.ps)
     1.9 -	// AND ACTUALLY reflect_interruption doesn't use it anyway!
    1.10  	vector = priv_emulate(current,regs,isr);
    1.11  	if (vector != IA64_NO_FAULT && vector != IA64_RFI_IN_PROGRESS) {
    1.12 -		PSCB(current,itir) =
    1.13 -			vcpu_get_itir_on_fault(v,PSCB(current,ifa));
    1.14 +		// Note: if a path results in a vector to reflect that requires
    1.15 +		// iha/itir (e.g. vcpu_force_data_miss), they must be set there
    1.16  		reflect_interruption(isr,regs,vector);
    1.17  	}
    1.18  }
     2.1 --- a/xen/arch/ia64/xen/vcpu.c	Fri Nov 18 10:01:10 2005 -0600
     2.2 +++ b/xen/arch/ia64/xen/vcpu.c	Fri Nov 18 10:58:03 2005 -0600
     2.3 @@ -1186,6 +1186,8 @@ Privileged operation emulation routines
     2.4  IA64FAULT vcpu_force_data_miss(VCPU *vcpu, UINT64 ifa)
     2.5  {
     2.6  	PSCB(vcpu,ifa) = ifa;
     2.7 +	PSCB(vcpu,itir) = vcpu_get_itir_on_fault(vcpu,ifa);
     2.8 +	vcpu_thash(current, ifa, &PSCB(current,iha));
     2.9  	return (vcpu_get_rr_ve(vcpu,ifa) ? IA64_DATA_TLB_VECTOR : IA64_ALT_DATA_TLB_VECTOR);
    2.10  }
    2.11