From: Anthony Liguori <anthony@codemonkey.ws>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 02/13] qemu-timer: remove active_timers array
Date: Mon, 17 Oct 2011 14:50:23 -0500 [thread overview]
Message-ID: <4E9C86FF.2000907@codemonkey.ws> (raw)
In-Reply-To: <1318332930-16217-3-git-send-email-pbonzini@redhat.com>
On 10/11/2011 06:35 AM, Paolo Bonzini wrote:
> Embed the list in the QEMUClock instead.
>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
Regards,
Anthony Liguori
> ---
> qemu-timer.c | 59 +++++++++++++++++++++++++++------------------------------
> 1 files changed, 28 insertions(+), 31 deletions(-)
>
> diff --git a/qemu-timer.c b/qemu-timer.c
> index ad1fc8b..acf7a15 100644
> --- a/qemu-timer.c
> +++ b/qemu-timer.c
> @@ -134,6 +134,7 @@ struct QEMUClock {
> int enabled;
>
> QEMUTimer *warp_timer;
> + QEMUTimer *active_timers;
>
> NotifierList reset_notifiers;
> int64_t last;
> @@ -352,14 +353,10 @@ next:
> }
> }
>
> -#define QEMU_NUM_CLOCKS 3
> -
> QEMUClock *rt_clock;
> QEMUClock *vm_clock;
> QEMUClock *host_clock;
>
> -static QEMUTimer *active_timers[QEMU_NUM_CLOCKS];
> -
> static QEMUClock *qemu_new_clock(int type)
> {
> QEMUClock *clock;
> @@ -403,7 +400,7 @@ static void icount_warp_rt(void *opaque)
> int64_t delta = cur_time - cur_icount;
> qemu_icount_bias += MIN(warp_delta, delta);
> }
> - if (qemu_timer_expired(active_timers[QEMU_CLOCK_VIRTUAL],
> + if (qemu_timer_expired(vm_clock->active_timers,
> qemu_get_clock_ns(vm_clock))) {
> qemu_notify_event();
> }
> @@ -434,7 +431,7 @@ void qemu_clock_warp(QEMUClock *clock)
> * the earliest vm_clock timer.
> */
> icount_warp_rt(NULL);
> - if (!all_cpu_threads_idle() || !active_timers[clock->type]) {
> + if (!all_cpu_threads_idle() || !clock->active_timers) {
> qemu_del_timer(clock->warp_timer);
> return;
> }
> @@ -489,7 +486,7 @@ void qemu_del_timer(QEMUTimer *ts)
>
> /* NOTE: this code must be signal safe because
> qemu_timer_expired() can be called from a signal. */
> - pt =&active_timers[ts->clock->type];
> + pt =&ts->clock->active_timers;
> for(;;) {
> t = *pt;
> if (!t)
> @@ -513,7 +510,7 @@ static void qemu_mod_timer_ns(QEMUTimer *ts, int64_t expire_time)
> /* add the timer in the sorted list */
> /* NOTE: this code must be signal safe because
> qemu_timer_expired() can be called from a signal. */
> - pt =&active_timers[ts->clock->type];
> + pt =&ts->clock->active_timers;
> for(;;) {
> t = *pt;
> if (!qemu_timer_expired_ns(t, expire_time)) {
> @@ -526,7 +523,7 @@ static void qemu_mod_timer_ns(QEMUTimer *ts, int64_t expire_time)
> *pt = ts;
>
> /* Rearm if necessary */
> - if (pt ==&active_timers[ts->clock->type]) {
> + if (pt ==&ts->clock->active_timers) {
> if (!alarm_timer->pending) {
> qemu_rearm_alarm_timer(alarm_timer);
> }
> @@ -548,7 +545,7 @@ void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
> int qemu_timer_pending(QEMUTimer *ts)
> {
> QEMUTimer *t;
> - for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
> + for (t = ts->clock->active_timers; t != NULL; t = t->next) {
> if (t == ts)
> return 1;
> }
> @@ -569,7 +566,7 @@ static void qemu_run_timers(QEMUClock *clock)
> return;
>
> current_time = qemu_get_clock_ns(clock);
> - ptimer_head =&active_timers[clock->type];
> + ptimer_head =&clock->active_timers;
> for(;;) {
> ts = *ptimer_head;
> if (!qemu_timer_expired_ns(ts, current_time)) {
> @@ -773,8 +770,8 @@ int64_t qemu_next_icount_deadline(void)
> int64_t delta = INT32_MAX;
>
> assert(use_icount);
> - if (active_timers[QEMU_CLOCK_VIRTUAL]) {
> - delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
> + if (vm_clock->active_timers) {
> + delta = vm_clock->active_timers->expire_time -
> qemu_get_clock_ns(vm_clock);
> }
>
> @@ -789,20 +786,20 @@ static int64_t qemu_next_alarm_deadline(void)
> int64_t delta;
> int64_t rtdelta;
>
> - if (!use_icount&& active_timers[QEMU_CLOCK_VIRTUAL]) {
> - delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
> + if (!use_icount&& vm_clock->active_timers) {
> + delta = vm_clock->active_timers->expire_time -
> qemu_get_clock_ns(vm_clock);
> } else {
> delta = INT32_MAX;
> }
> - if (active_timers[QEMU_CLOCK_HOST]) {
> - int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time -
> + if (host_clock->active_timers) {
> + int64_t hdelta = host_clock->active_timers->expire_time -
> qemu_get_clock_ns(host_clock);
> if (hdelta< delta)
> delta = hdelta;
> }
> - if (active_timers[QEMU_CLOCK_REALTIME]) {
> - rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time -
> + if (rt_clock->active_timers) {
> + rtdelta = (rt_clock->active_timers->expire_time -
> qemu_get_clock_ns(rt_clock));
> if (rtdelta< delta)
> delta = rtdelta;
> @@ -871,9 +868,9 @@ static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
> int64_t current_ns;
>
> assert(alarm_has_dynticks(t));
> - if (!active_timers[QEMU_CLOCK_REALTIME]&&
> - !active_timers[QEMU_CLOCK_VIRTUAL]&&
> - !active_timers[QEMU_CLOCK_HOST])
> + if (!rt_clock->active_timers&&
> + !vm_clock->active_timers&&
> + !host_clock->active_timers)
> return;
>
> nearest_delta_ns = qemu_next_alarm_deadline();
> @@ -925,9 +922,9 @@ static void unix_rearm_timer(struct qemu_alarm_timer *t)
> int err;
>
> assert(alarm_has_dynticks(t));
> - if (!active_timers[QEMU_CLOCK_REALTIME]&&
> - !active_timers[QEMU_CLOCK_VIRTUAL]&&
> - !active_timers[QEMU_CLOCK_HOST])
> + if (!rt_clock->active_timers&&
> + !vm_clock->active_timers&&
> + !host_clock->active_timers)
> return;
>
> nearest_delta_ns = qemu_next_alarm_deadline();
> @@ -1022,9 +1019,9 @@ static void mm_rearm_timer(struct qemu_alarm_timer *t)
> int nearest_delta_ms;
>
> assert(alarm_has_dynticks(t));
> - if (!active_timers[QEMU_CLOCK_REALTIME]&&
> - !active_timers[QEMU_CLOCK_VIRTUAL]&&
> - !active_timers[QEMU_CLOCK_HOST]) {
> + if (!rt_clock->active_timers&&
> + !vm_clock->active_timers&&
> + !host_clock->active_timers) {
> return;
> }
>
> @@ -1092,9 +1089,9 @@ static void win32_rearm_timer(struct qemu_alarm_timer *t)
> BOOLEAN success;
>
> assert(alarm_has_dynticks(t));
> - if (!active_timers[QEMU_CLOCK_REALTIME]&&
> - !active_timers[QEMU_CLOCK_VIRTUAL]&&
> - !active_timers[QEMU_CLOCK_HOST])
> + if (!rt_clock->active_timers&&
> + !vm_clock->active_timers&&
> + !host_clock->active_timers)
> return;
>
> nearest_delta_ms = (qemu_next_alarm_deadline() + 999999) / 1000000;
next prev parent reply other threads:[~2011-10-17 19:50 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-11 11:35 [Qemu-devel] [PATCH v2 00/13] allow tools to use the QEMU main loop Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 01/13] remove unused function Paolo Bonzini
2011-10-17 19:49 ` Anthony Liguori
2011-10-11 11:35 ` [Qemu-devel] [PATCH 02/13] qemu-timer: remove active_timers array Paolo Bonzini
2011-10-17 19:50 ` Anthony Liguori [this message]
2011-10-11 11:35 ` [Qemu-devel] [PATCH 03/13] qemu-timer: move common code to qemu_rearm_alarm_timer Paolo Bonzini
2011-10-17 19:51 ` Anthony Liguori
2011-10-11 11:35 ` [Qemu-devel] [PATCH 04/13] qemu-timer: more clock functions Paolo Bonzini
2011-10-17 19:51 ` Anthony Liguori
2011-10-11 11:35 ` [Qemu-devel] [PATCH 05/13] qemu-timer: move icount to cpus.c Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 06/13] qemu-timer: do not refer to runstate_is_running() Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 07/13] qemu-timer: use atexit for quit_timers Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 08/13] qemu-timer: move more stuff out of qemu-timer.c Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 09/13] qemu-timer: do not use RunState change handlers Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 10/13] create main-loop.h Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 11/13] create main-loop.c Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 12/13] Revert to a hand-made select loop Paolo Bonzini
2011-10-11 11:35 ` [Qemu-devel] [PATCH 13/13] simplify main loop functions Paolo Bonzini
2011-10-17 19:56 ` [Qemu-devel] [PATCH v2 00/13] allow tools to use the QEMU main loop Anthony Liguori
2011-10-17 20:09 ` Paolo Bonzini
2011-10-17 20:11 ` Anthony Liguori
2011-10-17 20:19 ` Paolo Bonzini
2011-10-18 11:59 ` 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=4E9C86FF.2000907@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=pbonzini@redhat.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.