From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47266) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VobrT-00005h-Om for qemu-devel@nongnu.org; Thu, 05 Dec 2013 11:33:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VobrN-0003YU-D9 for qemu-devel@nongnu.org; Thu, 05 Dec 2013 11:33:11 -0500 Received: from mx1.redhat.com ([209.132.183.28]:3750) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VobrN-0003YK-34 for qemu-devel@nongnu.org; Thu, 05 Dec 2013 11:33:05 -0500 Message-ID: <52A0AAB6.3090104@redhat.com> Date: Thu, 05 Dec 2013 17:32:54 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1386054500.25757.10.camel@nexus> <529D90A6.2080801@lab.ntt.co.jp> <52A0186A.2050207@lab.ntt.co.jp> <1386224104.3091.3.camel@nexus> <52A04732.4040105@redhat.com> <20131205161234.GA17277@amt.cnet> In-Reply-To: <20131205161234.GA17277@amt.cnet> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] target-i386: clear guest TSC on reset List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Marcelo Tosatti Cc: Gleb Natapov , Will Auld , qemu-devel@nongnu.org, kvm@vger.kernel.org, =?ISO-8859-1?Q?Fernando_Luis_V=E1zquez_Cao?= Il 05/12/2013 17:12, Marcelo Tosatti ha scritto: >> > - call kvm_set_ticks() from cpu_set_ticks() and cpu_enable_ticks() > env->tsc is just a placeholder for the vcpu TSC. > > A vcpus TSC from QEMU's point of view is a register initialized to zero, > which requires read/write from KVM, and migration. QEMU already tracks the TSC in cpu_get_ticks(). So far this is used only for TCG, but for example the code is there that preserves the TSC when you stop/resume the VM and when you migrate the VM. Reset is not yet there, which is a bug similar to the one Fernando is trying to solve for KVM. So, from QEMU's point of view the TSC should be a global value across the whole system (timer_state.cpu_ticks_offset) + a per-VCPU TSC offset (env->tsc_adjust). When talking to KVM, the per-VCPU TSC offset in turn has two parts, both set with KVM_SET_MSRS: one is computed from MSR_IA32_TSC, the other comes from MSR_IA32_TSC_ADJUST. The point here would be to treat it as such. With this change, env->tsc need not be migrated. The global value timer_state.cpu_ticks_offset is migrated already. The host-side TSC adjust can be computed from rdtsc()-timer_state.cpu_ticks_offset on the destination machine and/or at reset time. The guest-side TSC adjust is env->tsc_adjust as it is now. Paolo