From 4b8661da8ee24c30258d3473f399c39cbfb8b0bb Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 31 Oct 2007 09:14:49 +0000 Subject: [PATCH] x86, hvm: Fix 'no_missed_tick_accoutning' timer mode. From: Haitao Shan Signed-off-by: Keir Fraser --- xen/arch/x86/hvm/hvm.c | 3 ++- xen/arch/x86/hvm/vpt.c | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 05fc461ca7..42dd16c72f 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1849,7 +1849,8 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg) case HVM_PARAM_TIMER_MODE: rc = -EINVAL; if ( (a.value != HVMPTM_delay_for_missed_ticks) && - (a.value != HVMPTM_no_delay_for_missed_ticks) ) + (a.value != HVMPTM_no_delay_for_missed_ticks) && + (a.value != HVMPTM_no_missed_tick_accounting) ) goto param_fail; break; } diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 605a572283..75f64b26b9 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -118,7 +118,14 @@ void pt_restore_timer(struct vcpu *v) list_for_each_entry ( pt, head, list ) { if ( !mode_is(v->domain, no_missed_tick_accounting) ) + { pt_process_missed_ticks(pt); + } + else if ( (NOW() - pt->scheduled) >= 0 ) + { + pt->pending_intr_nr++; + pt->scheduled = NOW() + pt->period; + } set_timer(&pt->timer, pt->scheduled); } @@ -139,14 +146,7 @@ static void pt_timer_fn(void *data) { pt->scheduled += pt->period; if ( !mode_is(pt->vcpu->domain, no_missed_tick_accounting) ) - { pt_process_missed_ticks(pt); - } - else if ( (NOW() - pt->scheduled) >= 0 ) - { - pt->pending_intr_nr++; - pt->scheduled = NOW() + pt->period; - } set_timer(&pt->timer, pt->scheduled); } -- 2.39.5