From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Np0wU-0005vr-Sg for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:01:54 -0500 Received: from [199.232.76.173] (port=44783 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Np0wU-0005un-AQ for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:01:54 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1Np0wR-0001me-91 for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:01:53 -0500 Received: from mail-ew0-f214.google.com ([209.85.219.214]:60151) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Np0wQ-0001mU-TP for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:01:51 -0500 Received: by ewy6 with SMTP id 6so4189242ewy.17 for ; Tue, 09 Mar 2010 07:01:49 -0800 (PST) Message-ID: <4B9662D8.50005@codemonkey.ws> Date: Tue, 09 Mar 2010 09:01:44 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] QMP: Introduce WATCHDOG event References: <20100225121304.7992a7b5@redhat.com> In-Reply-To: <20100225121304.7992a7b5@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: qemu-devel@nongnu.org, rjones@redhat.com On 02/25/2010 09:13 AM, Luiz Capitulino wrote: > It's emitted whenever the watchdog device's timer expires. The action > taken is provided in the 'data' member. > > Signed-off-by: Luiz Capitulino > Applied. Thanks. Regards, Anthony Liguori > --- > QMP/qmp-events.txt | 19 +++++++++++++++++++ > hw/watchdog.c | 17 +++++++++++++++++ > monitor.c | 3 +++ > monitor.h | 1 + > 4 files changed, 40 insertions(+), 0 deletions(-) > > diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt > index 72920f6..a94e9b4 100644 > --- a/QMP/qmp-events.txt > +++ b/QMP/qmp-events.txt > @@ -169,3 +169,22 @@ 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.c b/hw/watchdog.c > index 6a3d1b4..aebb08a 100644 > --- a/hw/watchdog.c > +++ b/hw/watchdog.c > @@ -23,6 +23,8 @@ > #include "qemu-option.h" > #include "qemu-config.h" > #include "qemu-queue.h" > +#include "qemu-objects.h" > +#include "monitor.h" > #include "sysemu.h" > #include "hw/watchdog.h" > > @@ -98,6 +100,15 @@ 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. > */ > @@ -105,26 +116,32 @@ void watchdog_perform_action(void) > { > switch(watchdog_action) { > case WDT_RESET: /* same as 'system_reset' in monitor */ > + watchdog_mon_event("reset"); > qemu_system_reset_request(); > break; > > case WDT_SHUTDOWN: /* same as 'system_powerdown' in monitor */ > + watchdog_mon_event("shutdown"); > qemu_system_powerdown_request(); > break; > > case WDT_POWEROFF: /* same as 'quit' command in monitor */ > + watchdog_mon_event("poweroff"); > exit(0); > break; > > case WDT_PAUSE: /* same as 'stop' command in monitor */ > + watchdog_mon_event("pause"); > vm_stop(0); > break; > > case WDT_DEBUG: > + watchdog_mon_event("debug"); > fprintf(stderr, "watchdog: timer fired\n"); > break; > > case WDT_NONE: > + watchdog_mon_event("none"); > break; > } > } > diff --git a/monitor.c b/monitor.c > index 20512da..4704b18 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -426,6 +426,9 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) > case QEVENT_RTC_CHANGE: > event_name = "RTC_CHANGE"; > break; > + case QEVENT_WATCHDOG: > + event_name = "WATCHDOG"; > + break; > default: > abort(); > break; > diff --git a/monitor.h b/monitor.h > index aa51bd5..e5f2d2b 100644 > --- a/monitor.h > +++ b/monitor.h > @@ -24,6 +24,7 @@ typedef enum MonitorEvent { > QEVENT_VNC_DISCONNECTED, > QEVENT_BLOCK_IO_ERROR, > QEVENT_RTC_CHANGE, > + QEVENT_WATCHDOG, > QEVENT_MAX, > } MonitorEvent; > >