Patchwork [5/5] qmp: add SUSPEND_DISK event

login
register
mail settings
Submitter Luiz Capitulino
Date Aug. 9, 2012, 5:30 p.m.
Message ID <20120809143032.44b147fe@doriath.home>
Download mbox | patch
Permalink /patch/176201/
State New
Headers show

Comments

Luiz Capitulino - Aug. 9, 2012, 5:30 p.m.
Emitted when the guest makes a request to enter S4 state.

There are three possible ways of having this event, as described here:

 http://lists.gnu.org/archive/html/qemu-devel/2012-07/msg02307.html

I've decided to add a new event and make it indepedent of SHUTDOWN.
This means that the SHUTDOWN event will eventually follow the
SUSPEND_DISK event.

I've choosen this way because of two reasons:

 1. Having an indepedent event makes it possible to query for its
    existence by using query-events

 2. In the future, we may allow the user to change what QEMU should
    do as a result of the guest entering S4. So it's a good idea to
    keep both events separated

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---

This is on top of:

 [PATCH 0/4]: qmp: WAKEUP event related fixes

 QMP/qmp-events.txt | 14 ++++++++++++++
 hw/acpi.c          |  2 ++
 monitor.c          |  1 +
 monitor.h          |  1 +
 4 files changed, 18 insertions(+)
Luiz Capitulino - Aug. 9, 2012, 5:34 p.m.
On Thu, 9 Aug 2012 14:30:32 -0300
Luiz Capitulino <lcapitulino@redhat.com> wrote:

> Emitted when the guest makes a request to enter S4 state.

Oops, sorry for the bad subject. It should be just '[PATCH]'.
Eric Blake - Aug. 9, 2012, 7:51 p.m.
On 08/09/2012 11:30 AM, Luiz Capitulino wrote:
> Emitted when the guest makes a request to enter S4 state.
> 
> There are three possible ways of having this event, as described here:
> 
>  http://lists.gnu.org/archive/html/qemu-devel/2012-07/msg02307.html
> 
> I've decided to add a new event and make it indepedent of SHUTDOWN.
> This means that the SHUTDOWN event will eventually follow the
> SUSPEND_DISK event.
> 
> I've choosen this way because of two reasons:
> 
>  1. Having an indepedent event makes it possible to query for its
>     existence by using query-events
> 
>  2. In the future, we may allow the user to change what QEMU should
>     do as a result of the guest entering S4. So it's a good idea to
>     keep both events separated

Indeed makes sense as a separate event.

> 
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
> 
> This is on top of:
> 
>  [PATCH 0/4]: qmp: WAKEUP event related fixes
> 
>  QMP/qmp-events.txt | 14 ++++++++++++++
>  hw/acpi.c          |  2 ++
>  monitor.c          |  1 +
>  monitor.h          |  1 +
>  4 files changed, 18 insertions(+)
> 
> diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt
> index 2001a71..1c51bee 100644
> --- a/QMP/qmp-events.txt
> +++ b/QMP/qmp-events.txt
> @@ -252,6 +252,20 @@ Example:
>  { "event": "SUSPEND",
>       "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
>  
> +SUSPEND_DISK
> +------------
> +
> +Emitted when the guest makes a request to enter S4 state.
> +
> +Data: None.
> +
> +Example:
> +
> +{ "event": "SUSPEND_DISK",
> +     "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
> +
> +Note: QEMU shutdowns when entering S4 state.

s/shutdowns/shuts down/

Is that true when you use the -no-shutdown flag?  Do you get this event
if you did not use the -no-shutdown flag?
Luiz Capitulino - Aug. 9, 2012, 8:48 p.m.
On Thu, 09 Aug 2012 13:51:10 -0600
Eric Blake <eblake@redhat.com> wrote:

> On 08/09/2012 11:30 AM, Luiz Capitulino wrote:
> > Emitted when the guest makes a request to enter S4 state.
> > 
> > There are three possible ways of having this event, as described here:
> > 
> >  http://lists.gnu.org/archive/html/qemu-devel/2012-07/msg02307.html
> > 
> > I've decided to add a new event and make it indepedent of SHUTDOWN.
> > This means that the SHUTDOWN event will eventually follow the
> > SUSPEND_DISK event.
> > 
> > I've choosen this way because of two reasons:
> > 
> >  1. Having an indepedent event makes it possible to query for its
> >     existence by using query-events
> > 
> >  2. In the future, we may allow the user to change what QEMU should
> >     do as a result of the guest entering S4. So it's a good idea to
> >     keep both events separated
> 
> Indeed makes sense as a separate event.
> 
> > 
> > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> > ---
> > 
> > This is on top of:
> > 
> >  [PATCH 0/4]: qmp: WAKEUP event related fixes
> > 
> >  QMP/qmp-events.txt | 14 ++++++++++++++
> >  hw/acpi.c          |  2 ++
> >  monitor.c          |  1 +
> >  monitor.h          |  1 +
> >  4 files changed, 18 insertions(+)
> > 
> > diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt
> > index 2001a71..1c51bee 100644
> > --- a/QMP/qmp-events.txt
> > +++ b/QMP/qmp-events.txt
> > @@ -252,6 +252,20 @@ Example:
> >  { "event": "SUSPEND",
> >       "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
> >  
> > +SUSPEND_DISK
> > +------------
> > +
> > +Emitted when the guest makes a request to enter S4 state.
> > +
> > +Data: None.
> > +
> > +Example:
> > +
> > +{ "event": "SUSPEND_DISK",
> > +     "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
> > +
> > +Note: QEMU shutdowns when entering S4 state.
> 
> s/shutdowns/shuts down/
> 
> Is that true when you use the -no-shutdown flag?  Do you get this event
> if you did not use the -no-shutdown flag?

Yes, the event is orthogonal to the -no-shutdown flag, but qemu won't
shut down if -no-shutdown is passed. I'll fix that note.
Luiz Capitulino - Aug. 9, 2012, 8:52 p.m.
On Thu, 9 Aug 2012 17:48:34 -0300
Luiz Capitulino <lcapitulino@redhat.com> wrote:

> On Thu, 09 Aug 2012 13:51:10 -0600
> Eric Blake <eblake@redhat.com> wrote:
> 
> > On 08/09/2012 11:30 AM, Luiz Capitulino wrote:
> > > Emitted when the guest makes a request to enter S4 state.
> > > 
> > > There are three possible ways of having this event, as described here:
> > > 
> > >  http://lists.gnu.org/archive/html/qemu-devel/2012-07/msg02307.html
> > > 
> > > I've decided to add a new event and make it indepedent of SHUTDOWN.
> > > This means that the SHUTDOWN event will eventually follow the
> > > SUSPEND_DISK event.
> > > 
> > > I've choosen this way because of two reasons:
> > > 
> > >  1. Having an indepedent event makes it possible to query for its
> > >     existence by using query-events
> > > 
> > >  2. In the future, we may allow the user to change what QEMU should
> > >     do as a result of the guest entering S4. So it's a good idea to
> > >     keep both events separated
> > 
> > Indeed makes sense as a separate event.
> > 
> > > 
> > > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> > > ---
> > > 
> > > This is on top of:
> > > 
> > >  [PATCH 0/4]: qmp: WAKEUP event related fixes
> > > 
> > >  QMP/qmp-events.txt | 14 ++++++++++++++
> > >  hw/acpi.c          |  2 ++
> > >  monitor.c          |  1 +
> > >  monitor.h          |  1 +
> > >  4 files changed, 18 insertions(+)
> > > 
> > > diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt
> > > index 2001a71..1c51bee 100644
> > > --- a/QMP/qmp-events.txt
> > > +++ b/QMP/qmp-events.txt
> > > @@ -252,6 +252,20 @@ Example:
> > >  { "event": "SUSPEND",
> > >       "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
> > >  
> > > +SUSPEND_DISK
> > > +------------
> > > +
> > > +Emitted when the guest makes a request to enter S4 state.
> > > +
> > > +Data: None.
> > > +
> > > +Example:
> > > +
> > > +{ "event": "SUSPEND_DISK",
> > > +     "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
> > > +
> > > +Note: QEMU shutdowns when entering S4 state.
> > 
> > s/shutdowns/shuts down/
> > 
> > Is that true when you use the -no-shutdown flag?  Do you get this event
> > if you did not use the -no-shutdown flag?
> 
> Yes, the event is orthogonal to the -no-shutdown flag, but qemu won't
> shut down if -no-shutdown is passed. I'll fix that note.

Oh, wait.

QEMU still shut downs, but with -no-shutdown it won't exit. So I think the
note doesn't need any changes.

Eric, you're confusing me :)

Patch

diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt
index 2001a71..1c51bee 100644
--- a/QMP/qmp-events.txt
+++ b/QMP/qmp-events.txt
@@ -252,6 +252,20 @@  Example:
 { "event": "SUSPEND",
      "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
 
+SUSPEND_DISK
+------------
+
+Emitted when the guest makes a request to enter S4 state.
+
+Data: None.
+
+Example:
+
+{ "event": "SUSPEND_DISK",
+     "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
+
+Note: QEMU shutdowns when entering S4 state.
+
 VNC_CONNECTED
 -------------
 
diff --git a/hw/acpi.c b/hw/acpi.c
index effc7ec..f7950be 100644
--- a/hw/acpi.c
+++ b/hw/acpi.c
@@ -22,6 +22,7 @@ 
 #include "hw.h"
 #include "pc.h"
 #include "acpi.h"
+#include "monitor.h"
 
 struct acpi_table_header {
     uint16_t _length;         /* our length, not actual part of the hdr */
@@ -386,6 +387,7 @@  void acpi_pm1_cnt_write(ACPIREGS *ar, uint16_t val, char s4)
             break;
         default:
             if (sus_typ == s4) { /* S4 request */
+                monitor_protocol_event(QEVENT_SUSPEND_DISK, NULL);
                 qemu_system_shutdown_request();
             }
             break;
diff --git a/monitor.c b/monitor.c
index 49dccfe..4f3c595 100644
--- a/monitor.c
+++ b/monitor.c
@@ -456,6 +456,7 @@  static const char *monitor_event_names[] = {
     [QEVENT_BLOCK_JOB_CANCELLED] = "BLOCK_JOB_CANCELLED",
     [QEVENT_DEVICE_TRAY_MOVED] = "DEVICE_TRAY_MOVED",
     [QEVENT_SUSPEND] = "SUSPEND",
+    [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK",
     [QEVENT_WAKEUP] = "WAKEUP",
     [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE",
 };
diff --git a/monitor.h b/monitor.h
index 5f4de1b..4ef9a04 100644
--- a/monitor.h
+++ b/monitor.h
@@ -40,6 +40,7 @@  typedef enum MonitorEvent {
     QEVENT_BLOCK_JOB_CANCELLED,
     QEVENT_DEVICE_TRAY_MOVED,
     QEVENT_SUSPEND,
+    QEVENT_SUSPEND_DISK,
     QEVENT_WAKEUP,
     QEVENT_BALLOON_CHANGE,