funny results. Some times qemu just dies after printing that message:
"Guest moved used index from 20151 to 1"
Some times it doesn't die, but I'm unable to log into the guest: I type
username& password but the terminal kind of locks (the shell doesn't run).
Some times it works...
qapi-schema-guest.json | 11 +++++++++++
qga/guest-agent-commands.c | 19 +++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/qapi-schema-guest.json b/qapi-schema-guest.json
index fde5971..2c5bbcf 100644
--- a/qapi-schema-guest.json
+++ b/qapi-schema-guest.json
@@ -215,3 +215,14 @@
##
{ 'command': 'guest-fsfreeze-thaw',
'returns': 'int' }
+
+##
+# @guest-hibernate
+#
+# Save RAM contents to disk and powerdown the guest.
+#
+# Notes: This command doesn't return on success.
+#
+# Since: 1.1
+##
+{ 'command': 'guest-hibernate' }
diff --git a/qga/guest-agent-commands.c b/qga/guest-agent-commands.c
index 6da9904..9dd4060 100644
--- a/qga/guest-agent-commands.c
+++ b/qga/guest-agent-commands.c
@@ -550,6 +550,25 @@ int64_t qmp_guest_fsfreeze_thaw(Error **err)
}
#endif
+#define LINUX_SYS_STATE_FILE "/sys/power/state"
+
+void qmp_guest_hibernate(Error **err)
+{
+ int fd;
+
+ fd = open(LINUX_SYS_STATE_FILE, O_WRONLY);
+ if (fd< 0) {
+ error_set(err, QERR_OPEN_FILE_FAILED, LINUX_SYS_STATE_FILE);
+ return;
+ }
+
+ if (write(fd, "disk", 4)< 0) {
+ error_set(err, QERR_UNDEFINED_ERROR);
+ }
+
+ close(fd);
+}
+
/* register init/cleanup routines for stateful command groups */
void ga_command_state_init(GAState *s, GACommandState *cs)
{