qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: wenchaoqemu@gmail.com, lcapitulino@redhat.com
Subject: [Qemu-devel] [PATCH 2.1 30/36] qapi event: clean up
Date: Wed, 18 Jun 2014 08:43:54 +0200	[thread overview]
Message-ID: <1403073840-32603-31-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1403073840-32603-1-git-send-email-pbonzini@redhat.com>

From: Wenchao Xia <wenchaoqemu@gmail.com>

Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 include/monitor/monitor.h  |  40 ---------
 monitor.c                  | 220 +--------------------------------------------
 stubs/Makefile.objs        |   1 -
 stubs/mon-protocol-event.c |   6 --
 4 files changed, 4 insertions(+), 263 deletions(-)
 delete mode 100644 stubs/mon-protocol-event.c

diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
index 1c1f56f..3d6929d 100644
--- a/include/monitor/monitor.h
+++ b/include/monitor/monitor.h
@@ -19,48 +19,8 @@ extern Monitor *default_mon;
 /* flags for monitor commands */
 #define MONITOR_CMD_ASYNC       0x0001
 
-/* QMP events */
-typedef enum MonitorEvent {
-    QEVENT_SHUTDOWN,
-    QEVENT_RESET,
-    QEVENT_POWERDOWN,
-    QEVENT_STOP,
-    QEVENT_RESUME,
-    QEVENT_VNC_CONNECTED,
-    QEVENT_VNC_INITIALIZED,
-    QEVENT_VNC_DISCONNECTED,
-    QEVENT_BLOCK_IO_ERROR,
-    QEVENT_RTC_CHANGE,
-    QEVENT_WATCHDOG,
-    QEVENT_SPICE_CONNECTED,
-    QEVENT_SPICE_INITIALIZED,
-    QEVENT_SPICE_DISCONNECTED,
-    QEVENT_BLOCK_JOB_COMPLETED,
-    QEVENT_BLOCK_JOB_CANCELLED,
-    QEVENT_BLOCK_JOB_ERROR,
-    QEVENT_BLOCK_JOB_READY,
-    QEVENT_DEVICE_DELETED,
-    QEVENT_DEVICE_TRAY_MOVED,
-    QEVENT_NIC_RX_FILTER_CHANGED,
-    QEVENT_SUSPEND,
-    QEVENT_SUSPEND_DISK,
-    QEVENT_WAKEUP,
-    QEVENT_BALLOON_CHANGE,
-    QEVENT_SPICE_MIGRATE_COMPLETED,
-    QEVENT_GUEST_PANICKED,
-    QEVENT_BLOCK_IMAGE_CORRUPTED,
-    QEVENT_QUORUM_FAILURE,
-    QEVENT_QUORUM_REPORT_BAD,
-
-    /* Add to 'monitor_event_names' array in monitor.c when
-     * defining new events here */
-
-    QEVENT_MAX,
-} MonitorEvent;
-
 int monitor_cur_is_qmp(void);
 
-void monitor_protocol_event(MonitorEvent event, QObject *data);
 void monitor_init(CharDriverState *chr, int flags);
 
 int monitor_suspend(Monitor *mon);
diff --git a/monitor.c b/monitor.c
index db154e0..66a1db7 100644
--- a/monitor.c
+++ b/monitor.c
@@ -181,14 +181,6 @@ typedef struct MonitorControl {
  * throttling is calculated globally, rather than per-Monitor
  * instance.
  */
-typedef struct MonitorEventState {
-    MonitorEvent event; /* Event being tracked */
-    int64_t rate;       /* Period over which to throttle. 0 to disable */
-    int64_t last;       /* Time at which event was last emitted */
-    QEMUTimer *timer;   /* Timer for handling delayed events */
-    QObject *data;      /* Event pending delayed dispatch */
-} MonitorEventState;
-
 typedef struct MonitorQAPIEventState {
     QAPIEvent event;    /* Event being tracked */
     int64_t rate;       /* Minimum time (in ns) between two events */
@@ -449,58 +441,7 @@ static void monitor_protocol_emitter(Monitor *mon, QObject *data)
     QDECREF(qmp);
 }
 
-static void timestamp_put(QDict *qdict)
-{
-    int err;
-    QObject *obj;
-    qemu_timeval tv;
-
-    err = qemu_gettimeofday(&tv);
-    if (err < 0)
-        return;
-
-    obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", "
-                                "'microseconds': %" PRId64 " }",
-                                (int64_t) tv.tv_sec, (int64_t) tv.tv_usec);
-    qdict_put_obj(qdict, "timestamp", obj);
-}
-
-
-static const char *monitor_event_names[] = {
-    [QEVENT_SHUTDOWN] = "SHUTDOWN",
-    [QEVENT_RESET] = "RESET",
-    [QEVENT_POWERDOWN] = "POWERDOWN",
-    [QEVENT_STOP] = "STOP",
-    [QEVENT_RESUME] = "RESUME",
-    [QEVENT_VNC_CONNECTED] = "VNC_CONNECTED",
-    [QEVENT_VNC_INITIALIZED] = "VNC_INITIALIZED",
-    [QEVENT_VNC_DISCONNECTED] = "VNC_DISCONNECTED",
-    [QEVENT_BLOCK_IO_ERROR] = "BLOCK_IO_ERROR",
-    [QEVENT_RTC_CHANGE] = "RTC_CHANGE",
-    [QEVENT_WATCHDOG] = "WATCHDOG",
-    [QEVENT_SPICE_CONNECTED] = "SPICE_CONNECTED",
-    [QEVENT_SPICE_INITIALIZED] = "SPICE_INITIALIZED",
-    [QEVENT_SPICE_DISCONNECTED] = "SPICE_DISCONNECTED",
-    [QEVENT_BLOCK_JOB_COMPLETED] = "BLOCK_JOB_COMPLETED",
-    [QEVENT_BLOCK_JOB_CANCELLED] = "BLOCK_JOB_CANCELLED",
-    [QEVENT_BLOCK_JOB_ERROR] = "BLOCK_JOB_ERROR",
-    [QEVENT_BLOCK_JOB_READY] = "BLOCK_JOB_READY",
-    [QEVENT_DEVICE_DELETED] = "DEVICE_DELETED",
-    [QEVENT_DEVICE_TRAY_MOVED] = "DEVICE_TRAY_MOVED",
-    [QEVENT_NIC_RX_FILTER_CHANGED] = "NIC_RX_FILTER_CHANGED",
-    [QEVENT_SUSPEND] = "SUSPEND",
-    [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK",
-    [QEVENT_WAKEUP] = "WAKEUP",
-    [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE",
-    [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED",
-    [QEVENT_GUEST_PANICKED] = "GUEST_PANICKED",
-    [QEVENT_BLOCK_IMAGE_CORRUPTED] = "BLOCK_IMAGE_CORRUPTED",
-    [QEVENT_QUORUM_FAILURE] = "QUORUM_FAILURE",
-    [QEVENT_QUORUM_REPORT_BAD] = "QUORUM_REPORT_BAD",
-};
-QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX)
 
-static MonitorEventState monitor_event_state[QEVENT_MAX];
 static MonitorQAPIEventState monitor_qapi_event_state[QAPI_EVENT_MAX];
 
 /*
@@ -592,7 +533,7 @@ static void monitor_qapi_event_handler(void *opaque)
  * more than 1 event will be emitted within @rate
  * milliseconds
  */
-static void __attribute__((__unused__))
+static void
 monitor_qapi_event_throttle(QAPIEvent event, int64_t rate)
 {
     MonitorQAPIEventState *evstate;
@@ -624,158 +565,6 @@ static void monitor_qapi_event_init(void)
     qmp_event_set_func_emit(monitor_qapi_event_queue);
 }
 
-
-/*
- * Emits the event to every monitor instance
- */
-static void
-monitor_protocol_event_emit(MonitorEvent event,
-                            QObject *data)
-{
-    Monitor *mon;
-
-    trace_monitor_protocol_event_emit(event, data);
-    QLIST_FOREACH(mon, &mon_list, entry) {
-        if (monitor_ctrl_mode(mon) && qmp_cmd_mode(mon)) {
-            monitor_json_emitter(mon, data);
-        }
-    }
-}
-
-
-/*
- * Queue a new event for emission to Monitor instances,
- * applying any rate limiting if required.
- */
-static void
-monitor_protocol_event_queue(MonitorEvent event,
-                             QObject *data)
-{
-    MonitorEventState *evstate;
-    int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
-    assert(event < QEVENT_MAX);
-
-    evstate = &(monitor_event_state[event]);
-    trace_monitor_protocol_event_queue(event,
-                                       data,
-                                       evstate->rate,
-                                       evstate->last,
-                                       now);
-
-    /* Rate limit of 0 indicates no throttling */
-    if (!evstate->rate) {
-        monitor_protocol_event_emit(event, data);
-        evstate->last = now;
-    } else {
-        int64_t delta = now - evstate->last;
-        if (evstate->data ||
-            delta < evstate->rate) {
-            /* If there's an existing event pending, replace
-             * it with the new event, otherwise schedule a
-             * timer for delayed emission
-             */
-            if (evstate->data) {
-                qobject_decref(evstate->data);
-            } else {
-                int64_t then = evstate->last + evstate->rate;
-                timer_mod_ns(evstate->timer, then);
-            }
-            evstate->data = data;
-            qobject_incref(evstate->data);
-        } else {
-            monitor_protocol_event_emit(event, data);
-            evstate->last = now;
-        }
-    }
-}
-
-
-/*
- * The callback invoked by QemuTimer when a delayed
- * event is ready to be emitted
- */
-static void monitor_protocol_event_handler(void *opaque)
-{
-    MonitorEventState *evstate = opaque;
-    int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
-
-
-    trace_monitor_protocol_event_handler(evstate->event,
-                                         evstate->data,
-                                         evstate->last,
-                                         now);
-    if (evstate->data) {
-        monitor_protocol_event_emit(evstate->event, evstate->data);
-        qobject_decref(evstate->data);
-        evstate->data = NULL;
-    }
-    evstate->last = now;
-}
-
-
-/*
- * @event: the event ID to be limited
- * @rate: the rate limit in milliseconds
- *
- * Sets a rate limit on a particular event, so no
- * more than 1 event will be emitted within @rate
- * milliseconds
- */
-static void __attribute__((__unused__))
-monitor_protocol_event_throttle(MonitorEvent event,
-                                int64_t rate)
-{
-    MonitorEventState *evstate;
-    assert(event < QEVENT_MAX);
-
-    evstate = &(monitor_event_state[event]);
-
-    trace_monitor_protocol_event_throttle(event, rate);
-    evstate->event = event;
-    evstate->rate = rate * SCALE_MS;
-    evstate->timer = timer_new(QEMU_CLOCK_REALTIME,
-                                    SCALE_MS,
-                                    monitor_protocol_event_handler,
-                                    evstate);
-    evstate->last = 0;
-    evstate->data = NULL;
-}
-
-
-/* Global, one-time initializer to configure the rate limiting
- * and initialize state */
-static void monitor_protocol_event_init(void)
-{
-}
-
-/**
- * monitor_protocol_event(): Generate a Monitor event
- *
- * Event-specific data can be emitted through the (optional) 'data' parameter.
- */
-void monitor_protocol_event(MonitorEvent event, QObject *data)
-{
-    QDict *qmp;
-    const char *event_name;
-
-    assert(event < QEVENT_MAX);
-
-    event_name = monitor_event_names[event];
-    assert(event_name != NULL);
-
-    qmp = qdict_new();
-    timestamp_put(qmp);
-    qdict_put(qmp, "event", qstring_from_str(event_name));
-    if (data) {
-        qobject_incref(data);
-        qdict_put_obj(qmp, "data", data);
-    }
-
-    trace_monitor_protocol_event(event, event_name, qmp);
-    monitor_protocol_event_queue(event, QOBJECT(qmp));
-    QDECREF(qmp);
-}
-
 static int do_qmp_capabilities(Monitor *mon, const QDict *params,
                                QObject **ret_data)
 {
@@ -1170,10 +959,10 @@ CommandInfoList *qmp_query_commands(Error **errp)
 EventInfoList *qmp_query_events(Error **errp)
 {
     EventInfoList *info, *ev_list = NULL;
-    MonitorEvent e;
+    QAPIEvent e;
 
-    for (e = 0 ; e < QEVENT_MAX ; e++) {
-        const char *event_name = monitor_event_names[e];
+    for (e = 0 ; e < QAPI_EVENT_MAX ; e++) {
+        const char *event_name = QAPIEvent_lookup[e];
         assert(event_name != NULL);
         info = g_malloc0(sizeof(*info));
         info->value = g_malloc0(sizeof(*info->value));
@@ -5475,7 +5264,6 @@ void monitor_init(CharDriverState *chr, int flags)
     Monitor *mon;
 
     if (is_first_init) {
-        monitor_protocol_event_init();
         monitor_qapi_event_init();
         sortcmdlist();
         is_first_init = 0;
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index d99e2b9..60de407 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -14,7 +14,6 @@ stub-obj-y += iothread-lock.o
 stub-obj-y += migr-blocker.o
 stub-obj-y += mon-is-qmp.o
 stub-obj-y += mon-printf.o
-stub-obj-y += mon-protocol-event.o
 stub-obj-y += mon-set-error.o
 stub-obj-y += pci-drive-hot-add.o
 stub-obj-y += qtest.o
diff --git a/stubs/mon-protocol-event.c b/stubs/mon-protocol-event.c
deleted file mode 100644
index 0946e94..0000000
--- a/stubs/mon-protocol-event.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "qemu-common.h"
-#include "monitor/monitor.h"
-
-void monitor_protocol_event(MonitorEvent event, QObject *data)
-{
-}
-- 
1.9.3

  parent reply	other threads:[~2014-06-18  6:45 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-18  6:43 [Qemu-devel] [PATCH 2.1 00/36] Pending monitor patches for 2.1 Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 01/36] os-posix: include sys/time.h Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 02/36] qapi: Add includes from qapi/ as dependencies Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 03/36] qapi: add event helper functions Paolo Bonzini
2014-06-18 22:55   ` Wenchao Xia
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 04/36] qapi script: add event support Paolo Bonzini
2014-06-19 12:06   ` Eric Blake
2014-06-19 19:57   ` Eric Blake
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 05/36] test: add test cases for qapi event Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 06/36] qapi: adjust existing defines Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 07/36] monitor: add an implemention of qapi event emit method Paolo Bonzini
2014-06-19  4:03   ` Eric Blake
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 08/36] qapi: add new schema file qapi-event.json Paolo Bonzini
2014-06-19  4:04   ` Eric Blake
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 09/36] qapi event: convert SHUTDOWN Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 10/36] qapi event: convert POWERDOWN Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 11/36] qapi event: convert RESET Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 12/36] qapi event: convert STOP Paolo Bonzini
2014-06-19 18:15   ` Luiz Capitulino
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 13/36] qapi event: convert RESUME Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 14/36] qapi event: convert SUSPEND Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 15/36] qapi event: convert SUSPEND_DISK Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 16/36] qapi event: convert WAKEUP Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 17/36] qapi event: convert RTC_CHANGE Paolo Bonzini
2014-06-19  4:06   ` Eric Blake
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 18/36] qapi event: convert WATCHDOG Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 19/36] qapi event: convert DEVICE_DELETED Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 20/36] qapi event: convert DEVICE_TRAY_MOVED Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 21/36] qapi event: convert BLOCK_IO_ERROR and BLOCK_JOB_ERROR Paolo Bonzini
2014-06-26 15:37   ` Markus Armbruster
2014-06-26 15:40     ` Paolo Bonzini
2014-06-26 15:44       ` Luiz Capitulino
2014-06-26 15:58       ` Markus Armbruster
2014-06-26 16:00         ` Luiz Capitulino
2014-06-27 12:21         ` Markus Armbruster
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 22/36] qapi event: convert BLOCK_IMAGE_CORRUPTED Paolo Bonzini
2014-06-19  4:09   ` Eric Blake
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 23/36] qapi event: convert other BLOCK_JOB events Paolo Bonzini
2014-06-19  4:11   ` Eric Blake
2014-06-26 14:08   ` Markus Armbruster
2014-06-26 14:19     ` Paolo Bonzini
2014-06-26 14:24       ` Luiz Capitulino
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 24/36] qapi event: convert NIC_RX_FILTER_CHANGED Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 25/36] qapi event: convert VNC events Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 26/36] qapi event: convert SPICE events Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 27/36] qapi event: convert BALLOON_CHANGE Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 28/36] qapi event: convert GUEST_PANICKED Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 29/36] qapi event: convert QUORUM events Paolo Bonzini
2014-06-19  4:14   ` Eric Blake
2014-06-18  6:43 ` Paolo Bonzini [this message]
2014-06-19  4:17   ` [Qemu-devel] [PATCH 2.1 30/36] qapi event: clean up Eric Blake
2014-06-19  8:00     ` Paolo Bonzini
2014-06-19 14:51       ` Luiz Capitulino
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 32/36] qemu-char: do not call chr_write directly Paolo Bonzini
2014-06-19 14:47   ` Eric Blake
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 33/36] qemu-char: move pty_chr_update_read_handler around Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 34/36] qemu-char: make writes thread-safe Paolo Bonzini
2014-06-25  6:06   ` Stefan Weil
2014-06-25  7:03     ` Paolo Bonzini
2014-06-18  6:43 ` [Qemu-devel] [PATCH 2.1 35/36] monitor: protect outbuf and mux_out with mutex Paolo Bonzini
2014-06-18  6:44 ` [Qemu-devel] [PATCH 2.1 36/36] monitor: protect event emission Paolo Bonzini
     [not found] ` <1403073840-32603-32-git-send-email-pbonzini@redhat.com>
2014-06-19 12:03   ` [Qemu-devel] [PATCH 2.1 31/36] qemu-char: introduce qemu_chr_alloc Eric Blake
2014-06-19 12:52     ` Paolo Bonzini
2014-06-19 18:40 ` [Qemu-devel] [PATCH 2.1 00/36] Pending monitor patches for 2.1 Luiz Capitulino
2014-06-20 15:44 ` Eric Blake
2014-06-20 23:34   ` Wenchao Xia
2014-06-26 15:50 ` Markus Armbruster
2014-06-26 15:56   ` Luiz Capitulino

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=1403073840-32603-31-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wenchaoqemu@gmail.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).