aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/ia64/privop.c
diff options
context:
space:
mode:
Diffstat (limited to 'xen/arch/ia64/privop.c')
-rw-r--r--xen/arch/ia64/privop.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/xen/arch/ia64/privop.c b/xen/arch/ia64/privop.c
index c4fbcca45c..a45631b226 100644
--- a/xen/arch/ia64/privop.c
+++ b/xen/arch/ia64/privop.c
@@ -205,8 +205,7 @@ IA64FAULT priv_itc_d(VCPU *vcpu, INST64 inst)
return(IA64_ILLOP_FAULT);
if ((fault = vcpu_get_ifa(vcpu,&ifa)) != IA64_NO_FAULT)
return(IA64_ILLOP_FAULT);
- if (!inst.inst) pte = vcpu_get_tmp(vcpu,0);
- else pte = vcpu_get_gr(vcpu,inst.M41.r2);
+ pte = vcpu_get_gr(vcpu,inst.M41.r2);
return (vcpu_itc_d(vcpu,pte,itir,ifa));
}
@@ -220,8 +219,7 @@ IA64FAULT priv_itc_i(VCPU *vcpu, INST64 inst)
return(IA64_ILLOP_FAULT);
if ((fault = vcpu_get_ifa(vcpu,&ifa)) != IA64_NO_FAULT)
return(IA64_ILLOP_FAULT);
- if (!inst.inst) pte = vcpu_get_tmp(vcpu,0);
- else pte = vcpu_get_gr(vcpu,inst.M41.r2);
+ pte = vcpu_get_gr(vcpu,inst.M41.r2);
return (vcpu_itc_i(vcpu,pte,itir,ifa));
}
@@ -800,12 +798,14 @@ ia64_hyperprivop(unsigned long iim, REGS *regs)
(void)vcpu_cover(v);
return 1;
case HYPERPRIVOP_ITC_D:
- inst.inst = 0;
- (void)priv_itc_d(v,inst);
+ (void)vcpu_get_itir(v,&itir);
+ (void)vcpu_get_ifa(v,&ifa);
+ (void)vcpu_itc_d(v,regs->r8,itir,ifa);
return 1;
case HYPERPRIVOP_ITC_I:
- inst.inst = 0;
- (void)priv_itc_i(v,inst);
+ (void)vcpu_get_itir(v,&itir);
+ (void)vcpu_get_ifa(v,&ifa);
+ (void)vcpu_itc_i(v,regs->r8,itir,ifa);
return 1;
case HYPERPRIVOP_SSM_I:
(void)vcpu_set_psr_i(v);
@@ -832,10 +832,8 @@ ia64_hyperprivop(unsigned long iim, REGS *regs)
regs->r8 = val;
return 1;
case HYPERPRIVOP_PTC_GA:
- // FIXME: this doesn't seem to work yet, turned off
- //(void)vcpu_ptc_ga(v,regs->r8,regs->r9);
- //return 1;
- break;
+ (void)vcpu_ptc_ga(v,regs->r8,(1L << ((regs->r9 & 0xfc) >> 2)));
+ return 1;
case HYPERPRIVOP_ITR_D:
(void)vcpu_get_itir(v,&itir);
(void)vcpu_get_ifa(v,&ifa);