Patchwork [v3,3/6] suspend: add system_wakeup monitor command

login
register
mail settings
Submitter Gerd Hoffmann
Date Feb. 8, 2012, 11 a.m.
Message ID <1328698819-31269-4-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/140123/
State New
Headers show

Comments

Gerd Hoffmann - Feb. 8, 2012, 11 a.m.
This patch adds the system_wakeup monitor command which will simply
wake up suspended guests.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hmp-commands.hx  |   14 ++++++++++++++
 hmp.c            |    5 +++++
 hmp.h            |    1 +
 qapi-schema.json |   11 +++++++++++
 qmp-commands.hx  |   21 +++++++++++++++++++++
 qmp.c            |    5 +++++
 6 files changed, 57 insertions(+), 0 deletions(-)
Gleb Natapov - Feb. 9, 2012, 8:54 a.m.
On Wed, Feb 08, 2012 at 12:00:16PM +0100, Gerd Hoffmann wrote:
> This patch adds the system_wakeup monitor command which will simply
> wake up suspended guests.
> 
We can report this one as power button wakeup.

> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hmp-commands.hx  |   14 ++++++++++++++
>  hmp.c            |    5 +++++
>  hmp.h            |    1 +
>  qapi-schema.json |   11 +++++++++++
>  qmp-commands.hx  |   21 +++++++++++++++++++++
>  qmp.c            |    5 +++++
>  6 files changed, 57 insertions(+), 0 deletions(-)
> 
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 573b823..64b3656 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -352,6 +352,20 @@ Resume emulation.
>  ETEXI
>  
>      {
> +        .name       = "system_wakeup",
> +        .args_type  = "",
> +        .params     = "",
> +        .help       = "wakeup guest from suspend",
> +        .mhandler.cmd = hmp_system_wakeup,
> +    },
> +
> +STEXI
> +@item system_wakeup
> +@findex system_wakeup
> +Wakeup guest from suspend.
> +ETEXI
> +
> +    {
>          .name       = "gdbserver",
>          .args_type  = "device:s?",
>          .params     = "[device]",
> diff --git a/hmp.c b/hmp.c
> index 8ff8c94..3a54455 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -632,6 +632,11 @@ void hmp_cont(Monitor *mon, const QDict *qdict)
>      }
>  }
>  
> +void hmp_system_wakeup(Monitor *mon, const QDict *qdict)
> +{
> +    qmp_system_wakeup(NULL);
> +}
> +
>  void hmp_inject_nmi(Monitor *mon, const QDict *qdict)
>  {
>      Error *errp = NULL;
> diff --git a/hmp.h b/hmp.h
> index 18eecbd..5409464 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -41,6 +41,7 @@ void hmp_cpu(Monitor *mon, const QDict *qdict);
>  void hmp_memsave(Monitor *mon, const QDict *qdict);
>  void hmp_pmemsave(Monitor *mon, const QDict *qdict);
>  void hmp_cont(Monitor *mon, const QDict *qdict);
> +void hmp_system_wakeup(Monitor *mon, const QDict *qdict);
>  void hmp_inject_nmi(Monitor *mon, const QDict *qdict);
>  void hmp_set_link(Monitor *mon, const QDict *qdict);
>  void hmp_block_passwd(Monitor *mon, const QDict *qdict);
> diff --git a/qapi-schema.json b/qapi-schema.json
> index d02ee86..226c1da 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -999,6 +999,17 @@
>  { 'command': 'cont' }
>  
>  ##
> +# @system_wakeup:
> +#
> +# Wakeup guest from suspend
> +#
> +# Since:  1.1
> +#
> +# Returns:  nothing.
> +##
> +{ 'command': 'system_wakeup' }
> +
> +##
>  # @inject-nmi:
>  #
>  # Injects an Non-Maskable Interrupt into all guest's VCPUs.
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index b5e2ab8..f5081e2 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -212,6 +212,27 @@ Example:
>  EQMP
>  
>      {
> +        .name       = "system_wakeup",
> +        .args_type  = "",
> +        .mhandler.cmd_new = qmp_marshal_input_system_wakeup,
> +    },
> +
> +SQMP
> +system_wakeup
> +-------------
> +
> +Wakeup guest from suspend.
> +
> +Arguments: None.
> +
> +Example:
> +
> +-> { "execute": "system_wakeup" }
> +<- { "return": {} }
> +
> +EQMP
> +
> +    {
>          .name       = "system_reset",
>          .args_type  = "",
>          .mhandler.cmd_new = qmp_marshal_input_system_reset,
> diff --git a/qmp.c b/qmp.c
> index 45052cc..9ff5ec3 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -164,6 +164,11 @@ void qmp_cont(Error **errp)
>      vm_start();
>  }
>  
> +void qmp_system_wakeup(Error **errp)
> +{
> +    qemu_system_wakeup_request();
> +}
> +
>  ObjectPropertyInfoList *qmp_qom_list(const char *path, Error **errp)
>  {
>      Object *obj;
> -- 
> 1.7.1
> 
> 

--
			Gleb.

Patch

diff --git a/hmp-commands.hx b/hmp-commands.hx
index 573b823..64b3656 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -352,6 +352,20 @@  Resume emulation.
 ETEXI
 
     {
+        .name       = "system_wakeup",
+        .args_type  = "",
+        .params     = "",
+        .help       = "wakeup guest from suspend",
+        .mhandler.cmd = hmp_system_wakeup,
+    },
+
+STEXI
+@item system_wakeup
+@findex system_wakeup
+Wakeup guest from suspend.
+ETEXI
+
+    {
         .name       = "gdbserver",
         .args_type  = "device:s?",
         .params     = "[device]",
diff --git a/hmp.c b/hmp.c
index 8ff8c94..3a54455 100644
--- a/hmp.c
+++ b/hmp.c
@@ -632,6 +632,11 @@  void hmp_cont(Monitor *mon, const QDict *qdict)
     }
 }
 
+void hmp_system_wakeup(Monitor *mon, const QDict *qdict)
+{
+    qmp_system_wakeup(NULL);
+}
+
 void hmp_inject_nmi(Monitor *mon, const QDict *qdict)
 {
     Error *errp = NULL;
diff --git a/hmp.h b/hmp.h
index 18eecbd..5409464 100644
--- a/hmp.h
+++ b/hmp.h
@@ -41,6 +41,7 @@  void hmp_cpu(Monitor *mon, const QDict *qdict);
 void hmp_memsave(Monitor *mon, const QDict *qdict);
 void hmp_pmemsave(Monitor *mon, const QDict *qdict);
 void hmp_cont(Monitor *mon, const QDict *qdict);
+void hmp_system_wakeup(Monitor *mon, const QDict *qdict);
 void hmp_inject_nmi(Monitor *mon, const QDict *qdict);
 void hmp_set_link(Monitor *mon, const QDict *qdict);
 void hmp_block_passwd(Monitor *mon, const QDict *qdict);
diff --git a/qapi-schema.json b/qapi-schema.json
index d02ee86..226c1da 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -999,6 +999,17 @@ 
 { 'command': 'cont' }
 
 ##
+# @system_wakeup:
+#
+# Wakeup guest from suspend
+#
+# Since:  1.1
+#
+# Returns:  nothing.
+##
+{ 'command': 'system_wakeup' }
+
+##
 # @inject-nmi:
 #
 # Injects an Non-Maskable Interrupt into all guest's VCPUs.
diff --git a/qmp-commands.hx b/qmp-commands.hx
index b5e2ab8..f5081e2 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -212,6 +212,27 @@  Example:
 EQMP
 
     {
+        .name       = "system_wakeup",
+        .args_type  = "",
+        .mhandler.cmd_new = qmp_marshal_input_system_wakeup,
+    },
+
+SQMP
+system_wakeup
+-------------
+
+Wakeup guest from suspend.
+
+Arguments: None.
+
+Example:
+
+-> { "execute": "system_wakeup" }
+<- { "return": {} }
+
+EQMP
+
+    {
         .name       = "system_reset",
         .args_type  = "",
         .mhandler.cmd_new = qmp_marshal_input_system_reset,
diff --git a/qmp.c b/qmp.c
index 45052cc..9ff5ec3 100644
--- a/qmp.c
+++ b/qmp.c
@@ -164,6 +164,11 @@  void qmp_cont(Error **errp)
     vm_start();
 }
 
+void qmp_system_wakeup(Error **errp)
+{
+    qemu_system_wakeup_request();
+}
+
 ObjectPropertyInfoList *qmp_qom_list(const char *path, Error **errp)
 {
     Object *obj;