From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=41292 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PlL87-0001Nn-Hj for qemu-devel@nongnu.org; Fri, 04 Feb 2011 07:51:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PlL85-0008O8-1x for qemu-devel@nongnu.org; Fri, 04 Feb 2011 07:51:15 -0500 Received: from mail-vw0-f45.google.com ([209.85.212.45]:46350) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PlL84-0008MR-Vr for qemu-devel@nongnu.org; Fri, 04 Feb 2011 07:51:13 -0500 Received: by mail-vw0-f45.google.com with SMTP id 12so1393605vws.4 for ; Fri, 04 Feb 2011 04:51:12 -0800 (PST) Message-ID: <4D4BF63A.2030804@codemonkey.ws> Date: Fri, 04 Feb 2011 06:51:06 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v2 1/3] use nanoseconds everywhere for timeout computation References: <1296740941-24296-1-git-send-email-pbonzini@redhat.com> <1296740941-24296-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1296740941-24296-2-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org, aurelien@aurel32.net On 02/03/2011 07:48 AM, Paolo Bonzini wrote: > Suggested by Aurelien Jarno. > > Signed-off-by: Paolo Bonzini > Applied to master, Thanks. Regards, Anthony Liguori > --- > qemu-timer.c | 30 +++++++++++++++--------------- > 1 files changed, 15 insertions(+), 15 deletions(-) > > diff --git a/qemu-timer.c b/qemu-timer.c > index db1ec49..60283a8 100644 > --- a/qemu-timer.c > +++ b/qemu-timer.c > @@ -197,8 +197,8 @@ static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t) > t->rearm(t); > } > > -/* TODO: MIN_TIMER_REARM_US should be optimized */ > -#define MIN_TIMER_REARM_US 250 > +/* TODO: MIN_TIMER_REARM_NS should be optimized */ > +#define MIN_TIMER_REARM_NS 250000 > > #ifdef _WIN32 > > @@ -698,11 +698,11 @@ int64_t qemu_next_deadline(void) > > if (active_timers[QEMU_CLOCK_VIRTUAL]) { > delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time - > - qemu_get_clock(vm_clock); > + qemu_get_clock_ns(vm_clock); > } > if (active_timers[QEMU_CLOCK_HOST]) { > int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time - > - qemu_get_clock(host_clock); > + qemu_get_clock_ns(host_clock); > if (hdelta< delta) > delta = hdelta; > } > @@ -727,17 +727,17 @@ static uint64_t qemu_next_deadline_dyntick(void) > if (use_icount) > delta = INT32_MAX; > else > - delta = (qemu_next_deadline() + 999) / 1000; > + delta = qemu_next_deadline(); > > if (active_timers[QEMU_CLOCK_REALTIME]) { > - rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time - > - qemu_get_clock(rt_clock))*1000; > + rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time * 1000000 - > + qemu_get_clock_ns(rt_clock)); > if (rtdelta< delta) > delta = rtdelta; > } > > - if (delta< MIN_TIMER_REARM_US) > - delta = MIN_TIMER_REARM_US; > + if (delta< MIN_TIMER_REARM_NS) > + delta = MIN_TIMER_REARM_NS; > > return delta; > } > @@ -887,8 +887,8 @@ static void dynticks_rearm_timer(struct qemu_alarm_timer *t) > { > timer_t host_timer = (timer_t)(long)t->priv; > struct itimerspec timeout; > - int64_t nearest_delta_us = INT64_MAX; > - int64_t current_us; > + int64_t nearest_delta_ns = INT64_MAX; > + int64_t current_ns; > > assert(alarm_has_dynticks(t)); > if (!active_timers[QEMU_CLOCK_REALTIME]&& > @@ -896,7 +896,7 @@ static void dynticks_rearm_timer(struct qemu_alarm_timer *t) > !active_timers[QEMU_CLOCK_HOST]) > return; > > - nearest_delta_us = qemu_next_deadline_dyntick(); > + nearest_delta_ns = qemu_next_deadline_dyntick(); > > /* check whether a timer is already running */ > if (timer_gettime(host_timer,&timeout)) { > @@ -904,14 +904,14 @@ static void dynticks_rearm_timer(struct qemu_alarm_timer *t) > fprintf(stderr, "Internal timer error: aborting\n"); > exit(1); > } > - current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000; > - if (current_us&& current_us<= nearest_delta_us) > + current_ns = timeout.it_value.tv_sec * 1000000000LL + timeout.it_value.tv_nsec; > + if (current_ns&& current_ns<= nearest_delta_ns) > return; > > timeout.it_interval.tv_sec = 0; > timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */ > - timeout.it_value.tv_sec = nearest_delta_us / 1000000; > - timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000; > + timeout.it_value.tv_sec = nearest_delta_ns / 1000000000; > + timeout.it_value.tv_nsec = nearest_delta_ns % 1000000000; > if (timer_settime(host_timer, 0 /* RELATIVE */,&timeout, NULL)) { > perror("settime"); > fprintf(stderr, "Internal timer error: aborting\n"); >