From: kaf24@firebug.cl.cam.ac.uk Date: Wed, 7 Jun 2006 12:42:21 +0000 (+0100) Subject: [HVM][PIT] Fix missed_ticks() logic. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15972^2~46 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e56ed2dc521d9eccbcfb4db7de22ab621705864f;p=xen.git [HVM][PIT] Fix missed_ticks() logic. Signed-off-by Xiaowei Yang --- diff --git a/xen/arch/x86/hvm/intercept.c b/xen/arch/x86/hvm/intercept.c index 11884399c2..25a715cdfd 100644 --- a/xen/arch/x86/hvm/intercept.c +++ b/xen/arch/x86/hvm/intercept.c @@ -216,13 +216,14 @@ void hlt_timer_fn(void *data) static __inline__ void missed_ticks(struct periodic_time *pt) { - int missed_ticks; + s_time_t missed_ticks; - missed_ticks = (NOW() - pt->scheduled)/(s_time_t) pt->period; - if ( missed_ticks++ >= 0 ) { + missed_ticks = NOW() - pt->scheduled; + if ( missed_ticks > 0 ) { + missed_ticks = missed_ticks / (s_time_t) pt->period + 1; if ( missed_ticks > 1000 ) { /* TODO: Adjust guest time togther */ - pt->pending_intr_nr ++; + pt->pending_intr_nr++; } else { pt->pending_intr_nr += missed_ticks; @@ -237,6 +238,9 @@ void pt_timer_fn(void *data) struct vcpu *v = data; struct periodic_time *pt = &(v->domain->arch.hvm_domain.pl_time.periodic_tm); + pt->pending_intr_nr++; + pt->scheduled += pt->period; + /* pick up missed timer tick */ missed_ticks(pt); if ( test_bit(_VCPUF_running, &v->vcpu_flags) ) {