qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Eric Blake" <eblake@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	peterx@redhat.com
Subject: [Qemu-devel] [PATCH v9 5/7] monitor: remove event_clock_type
Date: Tue, 29 May 2018 13:57:53 +0800	[thread overview]
Message-ID: <20180529055755.12404-6-peterx@redhat.com> (raw)
In-Reply-To: <20180529055755.12404-1-peterx@redhat.com>

Instead, use a dynamic function to detect which clock we'll use.  The
problem is that the old code will let monitor initialization depends on
qtest_enabled().  After this change, we don't have such a dependency any
more.

Suggested-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
---
 monitor.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/monitor.c b/monitor.c
index 2504696d76..bd9ab5597f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -282,8 +282,6 @@ QmpCommandList qmp_commands, qmp_cap_negotiation_commands;
 
 Monitor *cur_mon;
 
-static QEMUClockType event_clock_type = QEMU_CLOCK_REALTIME;
-
 static void monitor_command_cb(void *opaque, const char *cmdline,
                                void *readline_opaque);
 
@@ -310,6 +308,15 @@ static inline bool monitor_is_hmp_non_interactive(const Monitor *mon)
     return !monitor_is_qmp(mon) && !monitor_uses_readline(mon);
 }
 
+static inline QEMUClockType monitor_get_clock(void)
+{
+    if (qtest_enabled()) {
+        return QEMU_CLOCK_VIRTUAL;
+    } else {
+        return QEMU_CLOCK_REALTIME;
+    }
+}
+
 /**
  * Is the current monitor, if any, a QMP monitor?
  */
@@ -633,7 +640,7 @@ monitor_qapi_event_queue(QAPIEvent event, QDict *qdict, Error **errp)
              * monitor_qapi_event_handler() in evconf->rate ns.  Any
              * events arriving before then will be delayed until then.
              */
-            int64_t now = qemu_clock_get_ns(event_clock_type);
+            int64_t now = qemu_clock_get_ns(monitor_get_clock());
 
             monitor_qapi_event_emit(event, qdict);
 
@@ -641,7 +648,7 @@ monitor_qapi_event_queue(QAPIEvent event, QDict *qdict, Error **errp)
             evstate->event = event;
             evstate->data = qobject_ref(data);
             evstate->qdict = NULL;
-            evstate->timer = timer_new_ns(event_clock_type,
+            evstate->timer = timer_new_ns(monitor_get_clock(),
                                           monitor_qapi_event_handler,
                                           evstate);
             g_hash_table_add(monitor_qapi_event_state, evstate);
@@ -666,7 +673,7 @@ static void monitor_qapi_event_handler(void *opaque)
     qemu_mutex_lock(&monitor_lock);
 
     if (evstate->qdict) {
-        int64_t now = qemu_clock_get_ns(event_clock_type);
+        int64_t now = qemu_clock_get_ns(monitor_get_clock());
 
         monitor_qapi_event_emit(evstate->event, evstate->qdict);
         qobject_unref(evstate->qdict);
@@ -722,10 +729,6 @@ static gboolean qapi_event_throttle_equal(const void *a, const void *b)
 
 static void monitor_qapi_event_init(void)
 {
-    if (qtest_enabled()) {
-        event_clock_type = QEMU_CLOCK_VIRTUAL;
-    }
-
     monitor_qapi_event_state = g_hash_table_new(qapi_event_throttle_hash,
                                                 qapi_event_throttle_equal);
     qmp_event_set_func_emit(monitor_qapi_event_queue);
-- 
2.17.0

  parent reply	other threads:[~2018-05-29  5:58 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-29  5:57 [Qemu-devel] [PATCH v9 0/7] monitor: let Monitor be thread safe Peter Xu
2018-05-29  5:57 ` [Qemu-devel] [PATCH v9 1/7] monitor: rename out_lock to mon_lock Peter Xu
2018-06-07 14:24   ` Markus Armbruster
2018-05-29  5:57 ` [Qemu-devel] [PATCH v9 2/7] monitor: protect mon->fds with mon_lock Peter Xu
2018-05-29  5:57 ` [Qemu-devel] [PATCH v9 3/7] monitor: more comments on lock-free elements Peter Xu
2018-05-30 16:26   ` Stefan Hajnoczi
2018-06-07 14:26   ` Markus Armbruster
2018-05-29  5:57 ` [Qemu-devel] [PATCH v9 4/7] monitor: fix comment for monitor_lock Peter Xu
2018-05-30 16:29   ` Stefan Hajnoczi
2018-06-07 14:27   ` Markus Armbruster
2018-05-29  5:57 ` Peter Xu [this message]
2018-05-30 16:35   ` [Qemu-devel] [PATCH v9 5/7] monitor: remove event_clock_type Stefan Hajnoczi
2018-05-31  4:11     ` Peter Xu
2018-05-31  8:23       ` Stefan Hajnoczi
2018-05-31  8:30         ` Peter Xu
2018-06-07 14:32   ` Markus Armbruster
2018-06-08  3:54     ` Peter Xu
2018-05-29  5:57 ` [Qemu-devel] [PATCH v9 6/7] monitor: move init global earlier Peter Xu
2018-05-30 16:37   ` Stefan Hajnoczi
2018-06-07 14:33   ` Markus Armbruster
2018-05-29  5:57 ` [Qemu-devel] [PATCH v9 7/7] monitor: add lock to protect mon_fdsets Peter Xu
2018-05-30 16:39   ` Stefan Hajnoczi
2018-06-07 14:38   ` Markus Armbruster

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=20180529055755.12404-6-peterx@redhat.com \
    --to=peterx@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).