aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/ia64/vcpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'xen/arch/ia64/vcpu.c')
-rw-r--r--xen/arch/ia64/vcpu.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/xen/arch/ia64/vcpu.c b/xen/arch/ia64/vcpu.c
index fb9db8a35f..b55e5b6bd7 100644
--- a/xen/arch/ia64/vcpu.c
+++ b/xen/arch/ia64/vcpu.c
@@ -117,7 +117,7 @@ void vcpu_set_metaphysical_mode(VCPU *vcpu, BOOLEAN newmode)
{
/* only do something if mode changes */
if (!!newmode ^ !!PSCB(vcpu,metaphysical_mode)) {
- if (newmode) set_metaphysical_rr(0,vcpu->domain->metaphysical_rid);
+ if (newmode) set_metaphysical_rr0();
else if (PSCB(vcpu,rrs[0]) != -1)
set_one_rr(0, PSCB(vcpu,rrs[0]));
PSCB(vcpu,metaphysical_mode) = newmode;
@@ -170,6 +170,13 @@ IA64FAULT vcpu_set_psr_dt(VCPU *vcpu)
return IA64_NO_FAULT;
}
+IA64FAULT vcpu_set_psr_i(VCPU *vcpu)
+{
+ PSCB(vcpu,interrupt_delivery_enabled) = 1;
+ PSCB(vcpu,interrupt_collection_enabled) = 1;
+ return IA64_NO_FAULT;
+}
+
IA64FAULT vcpu_set_psr_sm(VCPU *vcpu, UINT64 imm24)
{
struct ia64_psr psr, imm, *ipsr;
@@ -643,6 +650,7 @@ IA64FAULT vcpu_get_ivr(VCPU *vcpu, UINT64 *pval)
#ifdef HEARTBEAT_FREQ
#define N_DOMS 16 // period in seconds
static long count[N_DOMS] = { 0 };
+ static long nonclockcount[N_DOMS] = { 0 };
REGS *regs = vcpu_regs(vcpu);
unsigned domid = vcpu->domain->domain_id;
#endif
@@ -664,15 +672,15 @@ IA64FAULT vcpu_get_ivr(VCPU *vcpu, UINT64 *pval)
}
#ifdef HEARTBEAT_FREQ
if (domid >= N_DOMS) domid = N_DOMS-1;
- if (vector == (PSCB(vcpu,itv) & 0xff) &&
- !(++count[domid] & ((HEARTBEAT_FREQ*1024)-1))) {
- printf("Dom%d heartbeat... iip=%p,psr.i=%d,pend=%d\n",
- domid, regs->cr_iip,
- current->vcpu_info->arch.interrupt_delivery_enabled,
- current->vcpu_info->arch.pending_interruption);
- count[domid] = 0;
- dump_runq();
+ if (vector == (PSCB(vcpu,itv) & 0xff)) {
+ if (!(++count[domid] & ((HEARTBEAT_FREQ*1024)-1))) {
+ printf("Dom%d heartbeat... ticks=%lx,nonticks=%lx\n",
+ domid, count[domid], nonclockcount[domid]);
+ //count[domid] = 0;
+ //dump_runq();
+ }
}
+ else nonclockcount[domid]++;
#endif
// now have an unmasked, pending, deliverable vector!
// getting ivr has "side effects"