From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36089) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTvvz-00053Y-Tx for qemu-devel@nongnu.org; Tue, 16 Sep 2014 12:49:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XTvvt-0006NS-Oe for qemu-devel@nongnu.org; Tue, 16 Sep 2014 12:48:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42433) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTvvt-0006M2-Gd for qemu-devel@nongnu.org; Tue, 16 Sep 2014 12:48:49 -0400 Date: Tue, 16 Sep 2014 13:48:24 -0300 From: Marcelo Tosatti Message-ID: <20140916164824.GA32507@amt.cnet> References: <20140916151437.GA27819@amt.cnet> <54185A58.2010105@redhat.com> <20140916155526.GB29476@amt.cnet> <54185F5C.60906@redhat.com> <20140916160735.GB30753@amt.cnet> <541863B7.5060705@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <541863B7.5060705@redhat.com> Subject: Re: [Qemu-devel] [PATCH] kvmclock: clarify usage of cpu_clean_all_dirty List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel , Alexander Graf On Tue, Sep 16, 2014 at 06:22:15PM +0200, Paolo Bonzini wrote: > Il 16/09/2014 18:07, Marcelo Tosatti ha scritto: > >> > The cpu_synchronize_all_states() call in kvmclock_vm_state_change() is > >> > needed to make env->tsc up to date with the value on the source, right? > > Its there to make sure the pair > > > > env->tsc, s->clock = data.clock > > > > are relative to point close in time. > > Ok. But why are they not close in time? Scenario 1 A. s->clock = get_clock() B. env->tsc = rdtsc() Scenario 2 A. s->clock = get_clock() C. VM callbacks, bdrv_flush, ... B. env->tsc = rdtsc() They are not "close in time" because of C. > Could we have the opposite situation where env->tsc is loaded a long > time _after_ s->clock, and something breaks? This particular read avoids an overflow. See + assert(time.tsc_timestamp <= migration_tsc); About your question, perhaps, would have to make up an env->tsc, s->clock pair which breaks the code or a guest application. > Also, there is no reason to do kvmclock_current_nsec() during normal > execution of the VM. Is the s->clock sent by the source ever good > across migration, and could the source send kvmclock_current_nsec() > instead of whatever KVM_GET_CLOCK returns? Yes it could. What difference does it make? > I don't understand this code very well, but it seems to me that the > migration handling and VM state change handler are mixed up... I don't see what the problem is. I am sure you can understand the code.