qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: peter.maydell@linaro.org
Cc: qemu-devel@nongnu.org, anthony@codemonkey.ws
Subject: [Qemu-devel] [PULL 22/40] qapi event: convert WATCHDOG
Date: Thu, 19 Jun 2014 15:39:34 -0400	[thread overview]
Message-ID: <1403206792-15387-23-git-send-email-lcapitulino@redhat.com> (raw)
In-Reply-To: <1403206792-15387-1-git-send-email-lcapitulino@redhat.com>

From: Wenchao Xia <wenchaoqemu@gmail.com>

Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 docs/qmp/qmp-events.txt | 19 -------------------
 hw/watchdog/watchdog.c  | 23 +++++++----------------
 monitor.c               |  2 +-
 qapi-event.json         | 15 +++++++++++++++
 qapi-schema.json        | 24 ++++++++++++++++++++++++
 5 files changed, 47 insertions(+), 36 deletions(-)

diff --git a/docs/qmp/qmp-events.txt b/docs/qmp/qmp-events.txt
index 8cad3e7..df15dc8 100644
--- a/docs/qmp/qmp-events.txt
+++ b/docs/qmp/qmp-events.txt
@@ -415,22 +415,3 @@ Example:
         "client": { "family": "ipv4", "service": "46089",
                     "host": "127.0.0.1", "sasl_username": "luiz" } },
         "timestamp": { "seconds": 1263475302, "microseconds": 150772 } }
-
-WATCHDOG
---------
-
-Emitted when the watchdog device's timer is expired.
-
-Data:
-
-- "action": Action that has been taken, it's one of the following (json-string):
-            "reset", "shutdown", "poweroff", "pause", "debug", or "none"
-
-Example:
-
-{ "event": "WATCHDOG",
-     "data": { "action": "reset" },
-     "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
-
-Note: If action is "reset", "shutdown", or "pause" the WATCHDOG event is
-followed respectively by the RESET, SHUTDOWN, or STOP events.
diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c
index f28161b..4aebd34 100644
--- a/hw/watchdog/watchdog.c
+++ b/hw/watchdog/watchdog.c
@@ -24,9 +24,9 @@
 #include "qemu/config-file.h"
 #include "qemu/queue.h"
 #include "qapi/qmp/types.h"
-#include "monitor/monitor.h"
 #include "sysemu/sysemu.h"
 #include "sysemu/watchdog.h"
+#include "qapi-event.h"
 
 /* Possible values for action parameter. */
 #define WDT_RESET        1	/* Hard reset. */
@@ -101,15 +101,6 @@ int select_watchdog_action(const char *p)
     return 0;
 }
 
-static void watchdog_mon_event(const char *action)
-{
-    QObject *data;
-
-    data = qobject_from_jsonf("{ 'action': %s }", action);
-    monitor_protocol_event(QEVENT_WATCHDOG, data);
-    qobject_decref(data);
-}
-
 /* This actually performs the "action" once a watchdog has expired,
  * ie. reboot, shutdown, exit, etc.
  */
@@ -117,31 +108,31 @@ void watchdog_perform_action(void)
 {
     switch(watchdog_action) {
     case WDT_RESET:             /* same as 'system_reset' in monitor */
-        watchdog_mon_event("reset");
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_RESET, &error_abort);
         qemu_system_reset_request();
         break;
 
     case WDT_SHUTDOWN:          /* same as 'system_powerdown' in monitor */
-        watchdog_mon_event("shutdown");
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_SHUTDOWN, &error_abort);
         qemu_system_powerdown_request();
         break;
 
     case WDT_POWEROFF:          /* same as 'quit' command in monitor */
-        watchdog_mon_event("poweroff");
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_POWEROFF, &error_abort);
         exit(0);
 
     case WDT_PAUSE:             /* same as 'stop' command in monitor */
-        watchdog_mon_event("pause");
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_PAUSE, &error_abort);
         vm_stop(RUN_STATE_WATCHDOG);
         break;
 
     case WDT_DEBUG:
-        watchdog_mon_event("debug");
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_DEBUG, &error_abort);
         fprintf(stderr, "watchdog: timer fired\n");
         break;
 
     case WDT_NONE:
-        watchdog_mon_event("none");
+        qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_NONE, &error_abort);
         break;
     }
 }
diff --git a/monitor.c b/monitor.c
index cfaed60..589ae37 100644
--- a/monitor.c
+++ b/monitor.c
@@ -615,6 +615,7 @@ static void monitor_qapi_event_init(void)
 {
     /* Limit guest-triggerable events to 1 per second */
     monitor_qapi_event_throttle(QAPI_EVENT_RTC_CHANGE, 1000);
+    monitor_qapi_event_throttle(QAPI_EVENT_WATCHDOG, 1000);
 
     qmp_event_set_func_emit(monitor_qapi_event_queue);
 }
@@ -743,7 +744,6 @@ static void monitor_protocol_event_init(void)
 {
     /* Limit RTC & BALLOON events to 1 per second */
     monitor_protocol_event_throttle(QEVENT_BALLOON_CHANGE, 1000);
-    monitor_protocol_event_throttle(QEVENT_WATCHDOG, 1000);
     /* limit the rate of quorum events to avoid hammering the management */
     monitor_protocol_event_throttle(QEVENT_QUORUM_REPORT_BAD, 1000);
     monitor_protocol_event_throttle(QEVENT_QUORUM_FAILURE, 1000);
diff --git a/qapi-event.json b/qapi-event.json
index e6cfafa..e7dbfab 100644
--- a/qapi-event.json
+++ b/qapi-event.json
@@ -91,3 +91,18 @@
 ##
 { 'event': 'RTC_CHANGE',
   'data': { 'offset': 'int' } }
+
+##
+# @WATCHDOG
+#
+# Emitted when the watchdog device's timer is expired
+#
+# @action: action that has been taken
+#
+# Note: If action is "reset", "shutdown", or "pause" the WATCHDOG event is
+# followed respectively by the RESET, SHUTDOWN, or STOP events
+#
+# Since: 0.13.0
+##
+{ 'event': 'WATCHDOG',
+  'data': { 'action': 'WatchdogExpirationAction' } }
diff --git a/qapi-schema.json b/qapi-schema.json
index 26e0278..33d76bc 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3141,4 +3141,28 @@
               'rel'     : 'InputMoveEvent',
               'abs'     : 'InputMoveEvent' } }
 
+##
+# @WatchdogExpirationAction
+#
+# An enumeration of the actions taken when the watchdog device's timer is
+# expired
+#
+# @reset: system resets
+#
+# @shutdown: system shutdown, note that it is similar to @powerdown, which
+#            tries to set to system status and notify guest
+#
+# @poweroff: system poweroff, the emulator program exits
+#
+# @pause: system pauses, similar to @stop
+#
+# @debug: system enters debug state
+#
+# @none: nothing is done
+#
+# Since: 2.1
+##
+{ 'enum': 'WatchdogExpirationAction',
+  'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none' ] }
+
 { 'include': 'qapi-event.json' }
-- 
1.9.3

  parent reply	other threads:[~2014-06-19 19:40 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-19 19:39 [Qemu-devel] [PULL for-2.1 00/40] QMP queue Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 01/40] qapi: fix coding style in parameters list Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 02/40] qapi: add const prefix to 'char *' insider c_type() Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 03/40] qapi: Suppress unwanted space between type and identifier Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 04/40] json-lexer: fix escaped backslash in single-quoted string Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 05/40] os-posix: include sys/time.h Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 06/40] qapi: Add includes from qapi/ as dependencies Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 07/40] qapi: add event helper functions Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 08/40] qapi script: add event support Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 09/40] test: add test cases for qapi event Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 10/40] qapi: adjust existing defines Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 11/40] monitor: add an implemention of qapi event emit method Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 12/40] qapi: add new schema file qapi-event.json Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 13/40] qapi event: convert SHUTDOWN Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 14/40] qapi event: convert POWERDOWN Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 15/40] qapi event: convert RESET Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 16/40] qapi event: convert STOP Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 17/40] qapi event: convert RESUME Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 18/40] qapi event: convert SUSPEND Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 19/40] qapi event: convert SUSPEND_DISK Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 20/40] qapi event: convert WAKEUP Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 21/40] qapi event: convert RTC_CHANGE Luiz Capitulino
2014-06-19 19:39 ` Luiz Capitulino [this message]
2014-06-19 19:39 ` [Qemu-devel] [PULL 23/40] qapi event: convert DEVICE_DELETED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 24/40] qapi event: convert DEVICE_TRAY_MOVED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 25/40] qapi event: convert BLOCK_IO_ERROR and BLOCK_JOB_ERROR Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 26/40] qapi event: convert BLOCK_IMAGE_CORRUPTED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 27/40] qapi event: convert other BLOCK_JOB events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 28/40] qapi event: convert NIC_RX_FILTER_CHANGED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 29/40] qapi event: convert VNC events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 30/40] qapi event: convert SPICE events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 31/40] qapi event: convert BALLOON_CHANGE Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 32/40] qapi event: convert GUEST_PANICKED Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 33/40] qapi event: convert QUORUM events Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 34/40] qapi event: clean up Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 35/40] qemu-char: introduce qemu_chr_alloc Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 36/40] qemu-char: do not call chr_write directly Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 37/40] qemu-char: move pty_chr_update_read_handler around Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 38/40] qemu-char: make writes thread-safe Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 39/40] monitor: protect outbuf and mux_out with mutex Luiz Capitulino
2014-06-19 19:39 ` [Qemu-devel] [PULL 40/40] monitor: protect event emission Luiz Capitulino
2014-06-20 18:24 ` [Qemu-devel] [PULL for-2.1 00/40] QMP queue Peter Maydell
2014-06-20 18:44   ` Luiz Capitulino
2014-06-20 19:17     ` Paolo Bonzini
2014-06-20 19:49     ` Paolo Bonzini
2014-06-20 20:02       ` Eric Blake
2014-06-24 13:08         ` Wenchao Xia
2014-06-24 13:20           ` Eric Blake
2014-06-24 13:24             ` Peter Maydell
2014-06-24 14:52               ` Wenchao Xia

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=1403206792-15387-23-git-send-email-lcapitulino@redhat.com \
    --to=lcapitulino@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=peter.maydell@linaro.org \
    --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 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).