diff -r 4054cd60895b xen/arch/x86/hvm/vpt.c --- a/xen/arch/x86/hvm/vpt.c Mon Dec 10 13:49:22 2007 +0000 +++ b/xen/arch/x86/hvm/vpt.c Tue Dec 11 23:51:08 2007 +0800 @@ -95,7 +95,7 @@ void pt_save_timer(struct vcpu *v) spin_lock(&v->arch.hvm_vcpu.tm_lock); list_for_each_entry ( pt, head, list ) - if ( !pt->do_not_freeze ) + if ( !pt->do_not_freeze && !pt->one_shot ) stop_timer(&pt->timer); pt_freeze_time(v); @@ -112,6 +112,8 @@ void pt_restore_timer(struct vcpu *v) list_for_each_entry ( pt, head, list ) { + if ( pt->one_shot ) + continue; pt_process_missed_ticks(pt); set_timer(&pt->timer, pt->scheduled); }