From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: [PATCH 0/2] Improve hpet accuracy Date: Wed, 11 Jun 2008 09:30:04 +0100 Message-ID: References: <484EB654.4010801@virtualiron.com> Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <484EB654.4010801@virtualiron.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Dave Winchell Cc: dan.magenheimer@oracle.com, xen-devel , Ben Guthro List-Id: xen-devel@lists.xenproject.org I implemented the monotonicity guarantee within hvm_get_guest_time(). We don't need or want get_s_time_mono(). -- Keir On 10/6/08 18:13, "Dave Winchell" wrote: > Keir, Dan: > > Although I plan to break up the patch, etc., I'm posting > this fix to the patch for anyone who might be interested. > > thanks, > Dave > # This is a BitKeeper generated diff -Nru style patch. > # > # ChangeSet > # 2008/06/10 12:20:48-04:00 winchell@dwinchell2.virtualiron.com > # vi-patch: xen-hpet > # > # Bug Id: 6057 > # > # Reviewed by: Robert > # > # SUMMARY: Fix wrap issue in monotonic s_time(). > # > # xen/arch/x86/time.c > # 2008/06/10 12:20:48-04:00 winchell@dwinchell2.virtualiron.com +3 -2 > # Fix wrap issue in monotonic s_time(). > # > diff -Nru a/xen/arch/x86/time.c b/xen/arch/x86/time.c > --- a/xen/arch/x86/time.c 2008-06-10 13:08:39 -04:00 > +++ b/xen/arch/x86/time.c 2008-06-10 13:08:39 -04:00 > @@ -534,7 +534,7 @@ > u64 count; > unsigned long flags; > struct cpu_time *t = &this_cpu(cpu_time); > - u64 tsc, delta; > + u64 tsc, delta, diff; > s_time_t now; > > if(hpet_main_counter_phys_avoid_hdw || !hpet_physical_inited) { > @@ -542,7 +542,8 @@ > rdtscll(tsc); > delta = tsc - t->local_tsc_stamp; > now = t->stime_local_stamp + scale_delta(delta, &t->tsc_scale); > - if(now > get_s_time_mon.last_ret) > + diff = (u64)now - (u64)get_s_time_mon.last_ret; > + if((s64)diff > (s64)0) > get_s_time_mon.last_ret = now; > else > now = get_s_time_mon.last_ret;