ia64/xen-unstable

changeset 10930:679683333917

[IA64] SMP Windows is up on VTI domain

This patch makes SMP Windows boot,
Rewrite global purge to support multiple page size.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
author awilliam@xenbuild.aw
date Fri Aug 04 09:15:51 2006 -0600 (2006-08-04)
parents 7cde0d938ef4
children c3e20511c745
files xen/arch/ia64/vmx/vmmu.c xen/arch/ia64/vmx/vmx_vcpu.c
line diff
     1.1 --- a/xen/arch/ia64/vmx/vmmu.c	Fri Aug 04 09:02:43 2006 -0600
     1.2 +++ b/xen/arch/ia64/vmx/vmmu.c	Fri Aug 04 09:15:51 2006 -0600
     1.3 @@ -528,19 +528,23 @@ struct ptc_ga_args {
     1.4  
     1.5  static void ptc_ga_remote_func (void *varg)
     1.6  {
     1.7 -    u64 oldrid, moldrid, mpta;
     1.8 +    u64 oldrid, moldrid, mpta, oldpsbits, vadr;
     1.9      struct ptc_ga_args *args = (struct ptc_ga_args *)varg;
    1.10      VCPU *v = args->vcpu;
    1.11 +    vadr = args->vadr;
    1.12  
    1.13      oldrid = VMX(v, vrr[0]);
    1.14      VMX(v, vrr[0]) = args->rid;
    1.15 +    oldpsbits = VMX(v, psbits[0]);
    1.16 +    VMX(v, psbits[0]) = VMX(v, psbits[REGION_NUMBER(vadr)]);
    1.17      moldrid = ia64_get_rr(0x0);
    1.18      ia64_set_rr(0x0,vrrtomrr(v,args->rid));
    1.19      mpta = ia64_get_pta();
    1.20      ia64_set_pta(v->arch.arch_vmx.mpta&(~1));
    1.21      ia64_srlz_d();
    1.22 -    vmx_vcpu_ptc_l(v, args->vadr, args->ps);
    1.23 +    vmx_vcpu_ptc_l(v, REGION_OFFSET(vadr), args->ps);
    1.24      VMX(v, vrr[0]) = oldrid; 
    1.25 +    VMX(v, psbits[0]) = oldpsbits;
    1.26      ia64_set_rr(0x0,moldrid);
    1.27      ia64_set_pta(mpta);
    1.28      ia64_dv_serialize_data();
    1.29 @@ -554,7 +558,7 @@ IA64FAULT vmx_vcpu_ptc_ga(VCPU *vcpu,UIN
    1.30      struct vcpu *v;
    1.31      struct ptc_ga_args args;
    1.32  
    1.33 -    args.vadr = va<<3>>3;
    1.34 +    args.vadr = va;
    1.35      vcpu_get_rr(vcpu, va, &args.rid);
    1.36      args.ps = ps;
    1.37      for_each_vcpu (d, v) {
     2.1 --- a/xen/arch/ia64/vmx/vmx_vcpu.c	Fri Aug 04 09:02:43 2006 -0600
     2.2 +++ b/xen/arch/ia64/vmx/vmx_vcpu.c	Fri Aug 04 09:15:51 2006 -0600
     2.3 @@ -202,9 +202,7 @@ IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, UI
     2.4      newrr.rrval=val;
     2.5      if (newrr.rid >= (1 << vcpu->domain->arch.rid_bits))
     2.6          panic_domain (NULL, "use of invalid rid %x\n", newrr.rid);
     2.7 -    if(oldrr.ps!=newrr.ps){
     2.8 -        thash_purge_all(vcpu);
     2.9 -    }
    2.10 +
    2.11      VMX(vcpu,vrr[reg>>61]) = val;
    2.12      switch((u64)(reg>>61)) {
    2.13      case VRN7: