From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [patch 03/18] x86: pvclock: remove pvclock_shadow_time Date: Tue, 30 Oct 2012 11:23:11 +0200 Message-ID: <508F9C7F.8010307@redhat.com> References: <20121024131340.742340256@redhat.com> <20121024131621.425527256@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, johnstul@us.ibm.com, jeremy@goop.org, glommer@parallels.com, zamsden@gmail.com, gleb@redhat.com, pbonzini@redhat.com To: Marcelo Tosatti Return-path: Received: from mx1.redhat.com ([209.132.183.28]:49045 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753638Ab2J3JX2 (ORCPT ); Tue, 30 Oct 2012 05:23:28 -0400 In-Reply-To: <20121024131621.425527256@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 10/24/2012 03:13 PM, Marcelo Tosatti wrote: > Originally from Jeremy Fitzhardinge. > > We can copy the information directly from "struct pvclock_vcpu_time_info", > remove pvclock_shadow_time. > > Signed-off-by: Marcelo Tosatti > > > unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src) > @@ -90,21 +54,20 @@ void pvclock_resume(void) > > cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) > { > - struct pvclock_shadow_time shadow; > unsigned version; > cycle_t ret, offset; > u64 last; > > do { > - version = pvclock_get_time_values(&shadow, src); > + version = src->version; > rdtsc_barrier(); > - offset = pvclock_get_nsec_offset(&shadow); > - ret = shadow.system_timestamp + offset; > + offset = pvclock_get_nsec_offset(src); > + ret = src->system_time + offset; > rdtsc_barrier(); > - } while (version != src->version); > + } while ((src->version & 1) || version != src->version); > > if ((valid_flags & PVCLOCK_TSC_STABLE_BIT) && > - (shadow.flags & PVCLOCK_TSC_STABLE_BIT)) > + (src->flags & PVCLOCK_TSC_STABLE_BIT)) > return ret; > You're now reading PVCLOCK_TSC_STABLE outside the critical section. We could have live migrated to a tsc-unstable host and had this flag cleared. -- error compiling committee.c: too many arguments to function