From: Laurent Vivier <lvivier@redhat.com>
To: qemu-devel@nongnu.org, Aurelien Jarno <aurelien@aurel32.net>,
Leon Alrae <leon.alrae@imgtec.com>
Subject: Re: [Qemu-devel] [PATCH v3 4/9] mips: remove muldiv64()
Date: Tue, 8 Sep 2015 14:54:02 +0200 [thread overview]
Message-ID: <55EEDA6A.3000308@redhat.com> (raw)
In-Reply-To: <1440703987-29012-5-git-send-email-lvivier@redhat.com>
ping ?
On 27/08/2015 21:33, Laurent Vivier wrote:
> Originally, timers were ticks based, and it made sense to
> add ticks to current time to know when to trigger an alarm.
>
> But since commit:
>
> 7447545 change all other clock references to use nanosecond resolution accessors
>
> All timers use nanoseconds and we need to convert ticks to nanoseconds, by
> doing something like:
>
> y = muldiv64(x, get_ticks_per_sec(), TIMER_FREQ)
>
> where x is the number of device ticks and y the number of system ticks.
>
> y is used as nanoseconds in timer functions,
> it works because 1 tick is 1 nanosecond.
> (get_ticks_per_sec() is 10^9)
>
> But as MIPS timer frequency is 100 MHz, we can also do:
>
> y = x * 10; /* 100 MHz period is 10 ns */
>
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
> hw/mips/cputimer.c | 19 ++++++++-----------
> 1 file changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/hw/mips/cputimer.c b/hw/mips/cputimer.c
> index 577c9ae..a74ae5c 100644
> --- a/hw/mips/cputimer.c
> +++ b/hw/mips/cputimer.c
> @@ -25,7 +25,7 @@
> #include "qemu/timer.h"
> #include "sysemu/kvm.h"
>
> -#define TIMER_FREQ 100 * 1000 * 1000
> +#define TIMER_PERIOD 10 /* 10 ns period for 100 Mhz frequency */
>
> /* XXX: do not use a global */
> uint32_t cpu_mips_get_random (CPUMIPSState *env)
> @@ -49,9 +49,8 @@ static void cpu_mips_timer_update(CPUMIPSState *env)
> uint32_t wait;
>
> now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
> - wait = env->CP0_Compare - env->CP0_Count -
> - (uint32_t)muldiv64(now, TIMER_FREQ, get_ticks_per_sec());
> - next = now + muldiv64(wait, get_ticks_per_sec(), TIMER_FREQ);
> + wait = env->CP0_Compare - env->CP0_Count - (uint32_t)(now / TIMER_PERIOD);
> + next = now + (uint64_t)wait * TIMER_PERIOD;
> timer_mod(env->timer, next);
> }
>
> @@ -79,8 +78,7 @@ uint32_t cpu_mips_get_count (CPUMIPSState *env)
> cpu_mips_timer_expire(env);
> }
>
> - return env->CP0_Count +
> - (uint32_t)muldiv64(now, TIMER_FREQ, get_ticks_per_sec());
> + return env->CP0_Count + (uint32_t)(now / TIMER_PERIOD);
> }
> }
>
> @@ -95,9 +93,8 @@ void cpu_mips_store_count (CPUMIPSState *env, uint32_t count)
> env->CP0_Count = count;
> else {
> /* Store new count register */
> - env->CP0_Count =
> - count - (uint32_t)muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
> - TIMER_FREQ, get_ticks_per_sec());
> + env->CP0_Count = count -
> + (uint32_t)(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) / TIMER_PERIOD);
> /* Update timer timer */
> cpu_mips_timer_update(env);
> }
> @@ -121,8 +118,8 @@ void cpu_mips_start_count(CPUMIPSState *env)
> void cpu_mips_stop_count(CPUMIPSState *env)
> {
> /* Store the current value */
> - env->CP0_Count += (uint32_t)muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
> - TIMER_FREQ, get_ticks_per_sec());
> + env->CP0_Count += (uint32_t)(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) /
> + TIMER_PERIOD);
> }
>
> static void mips_timer_cb (void *opaque)
>
next prev parent reply other threads:[~2015-09-08 12:54 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-27 19:32 [Qemu-trivial] [PATCH v3 0/9] remove useless muldiv64() Laurent Vivier
2015-08-27 19:32 ` [Qemu-devel] " Laurent Vivier
2015-08-27 19:32 ` [Qemu-trivial] [PATCH v3 1/9] i6300esb: remove muldiv64() Laurent Vivier
2015-08-27 19:32 ` [Qemu-devel] " Laurent Vivier
2015-09-14 13:31 ` [Qemu-devel] [PATCH v4 " Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 2/9] rtl8139: " Laurent Vivier
2015-08-28 14:12 ` Stefan Hajnoczi
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 3/9] pcnet: " Laurent Vivier
2015-08-28 14:12 ` Stefan Hajnoczi
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 4/9] mips: " Laurent Vivier
2015-09-08 12:54 ` Laurent Vivier [this message]
2015-09-08 13:42 ` Leon Alrae
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 5/9] openrisc: " Laurent Vivier
2015-09-08 12:54 ` Laurent Vivier
2015-08-27 19:33 ` [Qemu-trivial] [PATCH v3 6/9] arm: clarify the use of muldiv64() Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] " Laurent Vivier
2015-08-27 20:23 ` [Qemu-trivial] " Peter Crosthwaite
2015-08-27 20:23 ` Peter Crosthwaite
2015-09-01 11:17 ` [Qemu-trivial] " Peter Maydell
2015-09-01 11:17 ` [Qemu-devel] " Peter Maydell
2015-09-01 11:23 ` [Qemu-trivial] " Laurent Vivier
2015-09-01 11:23 ` [Qemu-devel] " Laurent Vivier
2015-09-01 11:30 ` [Qemu-trivial] " Peter Maydell
2015-09-01 11:30 ` [Qemu-devel] " Peter Maydell
2015-08-27 19:33 ` [Qemu-trivial] [PATCH v3 7/9] hpet: remove muldiv64() Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] " Laurent Vivier
2015-09-08 12:55 ` [Qemu-trivial] " Laurent Vivier
2015-09-08 12:55 ` Laurent Vivier
2015-09-08 12:58 ` [Qemu-trivial] " Paolo Bonzini
2015-09-08 12:58 ` Paolo Bonzini
2015-08-27 19:33 ` [Qemu-trivial] [PATCH v3 8/9] bt: " Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] " Laurent Vivier
2015-09-08 12:55 ` [Qemu-trivial] " Laurent Vivier
2015-09-08 12:55 ` Laurent Vivier
2015-09-08 12:57 ` [Qemu-trivial] " Paolo Bonzini
2015-09-08 12:57 ` Paolo Bonzini
2015-08-27 19:33 ` [Qemu-trivial] [PATCH v3 9/9] net: " Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] " Laurent Vivier
2015-08-28 14:12 ` [Qemu-trivial] " Stefan Hajnoczi
2015-08-28 14:12 ` [Qemu-devel] " Stefan Hajnoczi
2015-09-24 16:21 ` [Qemu-devel] [PATCH v3 0/9] remove useless muldiv64() Laurent Vivier
2015-09-25 10:31 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55EEDA6A.3000308@redhat.com \
--to=lvivier@redhat.com \
--cc=aurelien@aurel32.net \
--cc=leon.alrae@imgtec.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.