From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=36258 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PkFrv-0000wC-CW for qemu-devel@nongnu.org; Tue, 01 Feb 2011 08:02:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PkFrt-0001zt-CT for qemu-devel@nongnu.org; Tue, 01 Feb 2011 08:02:03 -0500 Received: from thoth.sbs.de ([192.35.17.2]:30457) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PkFrt-0001yf-3R for qemu-devel@nongnu.org; Tue, 01 Feb 2011 08:02:01 -0500 Message-ID: <4D480444.6070801@siemens.com> Date: Tue, 01 Feb 2011 14:01:56 +0100 From: Jan Kiszka MIME-Version: 1.0 References: <1296510679-12268-1-git-send-email-pbonzini@redhat.com> <1296510679-12268-3-git-send-email-pbonzini@redhat.com> In-Reply-To: <1296510679-12268-3-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 2/3] Correct alarm deadline computation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: "qemu-devel@nongnu.org" On 2011-01-31 22:51, Paolo Bonzini wrote: > When the QEMU_CLOCK_HOST clock was added, computation of its > deadline was added to qemu_next_deadline, which is correct but > incomplete. > > I noticed this by reading the very convoluted rules whereby > qemu_next_deadline_dyntick is computed, which miss QEMU_CLOCK_HOST > when use_icount is true. This patch inlines qemu_next_deadline > into qemu_next_deadline_dyntick, and then corrects the logic to skip > only QEMU_CLOCK_VIRTUAL when use_icount is true. > > Signed-off-by: Paolo Bonzini > Cc: Jan Kiszka > --- > qemu-timer.c | 15 +++++++++++---- > 1 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/qemu-timer.c b/qemu-timer.c > index 60283a8..c19d0a2 100644 > --- a/qemu-timer.c > +++ b/qemu-timer.c > @@ -724,11 +724,18 @@ static uint64_t qemu_next_deadline_dyntick(void) > int64_t delta; > int64_t rtdelta; > > - if (use_icount) > + if (!use_icount && active_timers[QEMU_CLOCK_VIRTUAL]) { > + delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time - > + qemu_get_clock(vm_clock); > + } else { > delta = INT32_MAX; > - else > - delta = qemu_next_deadline(); > - > + } > + if (active_timers[QEMU_CLOCK_HOST]) { > + int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time - > + qemu_get_clock(host_clock); > + if (hdelta < delta) > + delta = hdelta; > + } > if (active_timers[QEMU_CLOCK_REALTIME]) { > rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time - > qemu_get_clock_ns(rt_clock)); Looks good to me. I guess this applies without the first patch? Then it should go in (unless you are working on a new version for 1/3). Thanks for fixing this. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux