From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60752) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYsZB-0001h7-WA for qemu-devel@nongnu.org; Thu, 25 Feb 2016 04:50:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYsZ8-0006Xi-08 for qemu-devel@nongnu.org; Thu, 25 Feb 2016 04:50:37 -0500 References: <20160112024421.GH22925@voom.redhat.com> <56993062.4030604@ilande.co.uk> <20160118045113.GL9301@voom.fritz.box> <56A5B712.9070808@ilande.co.uk> <20160125111008.GG32205@voom.redhat.com> <56A7F3B7.3080908@ilande.co.uk> <20160201005218.GY23043@voom.redhat.com> <56B13EB4.9000309@ilande.co.uk> <20160203045926.GH15080@voom.fritz.box> <56CCCEAD.70805@ilande.co.uk> <20160224004738.GC2808@voom.fritz.box> <87mvqql27q.fsf@emacs.mitica> <56CE8436.6010404@ilande.co.uk> <56CE8A7B.60700@ilande.co.uk> From: Mark Cave-Ayland Message-ID: <56CECE5C.4070302@ilande.co.uk> Date: Thu, 25 Feb 2016 09:50:20 +0000 MIME-Version: 1.0 In-Reply-To: <56CE8A7B.60700@ilande.co.uk> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [Qemu-ppc] Migrating decrementer List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: quintela@redhat.com, David Gibson Cc: amit.shah@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org On 25/02/16 05:00, Mark Cave-Ayland wrote: > On 25/02/16 04:33, Mark Cave-Ayland wrote: > >> cpu_start/resume(): >> cpu->tb_env->tb_offset = >> qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) * tb_env->tb_freq + >> cpu->tb_env->tb_offset - >> qemu_clock_get_ns(QEMU_CLOCK_HOST) > > Actually just realised this is slightly wrong and in fact should be: > > cpu_start/resume(): > cpu->tb_env->tb_offset = > muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), > cpu->tb_env->tb_freq, NANOSECONDS_PER_SECOND) + > cpu->tb_env->tb_offset - > qemu_clock_get_ns(QEMU_CLOCK_HOST) Sign. And let me try that again, this time after caffeine: cpu_start/resume(): cpu->tb_env->tb_offset = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), cpu->tb_env->tb_freq, NANOSECONDS_PER_SECOND) + cpu->tb_env->tb_offset - cpu_get_host_ticks(); This should translate to: at CPU start, calculate the difference between the current guest virtual timebase and the host timebase, storing the difference in cpu->tb_env->tb_offset. ATB, Mark.