[libvirt] [PATCH v2 0/5] Allow hibernation on guests

Michal Privoznik mprivozn at redhat.com
Thu Jan 26 19:59:42 UTC 2012


As we've added guest agent recently, the whole world
of new functionality has opened. As this patch set,
which allows domains to enter S4 state.

What is needed for this?
Patched qemu. As this is not in qemu git, but patches
are await to be pushed in very short future. They can
be found here:

http://lists.gnu.org/archive/html/qemu-devel/2012-01/msg03261.html

Despite that, if anybody is willing to give me review
if I am going the right way, I'd appreciate it.

One thing, that you'll probably notice is this
'set-support-level' command. Basically, it tells GA what qemu version
is it running on. Ideally, this should be done as soon as
GA starts up. However, that cannot be determined from outside
world as GA doesn't emit any events yet.
Ideally^2 this command should be left out as it should be qemu
who tells its own agent this kind of information.
Anyway, I was going to call this command in qemuProcess{Startup,
Reconnect,Attach}, but it won't work. We need to un-pause guest CPUs
so guest can boot and start GA, but that implies returning from qemuProcess*.

So I am setting this just before 'guest-suspend' command, as
there is one more thing about GA. It is unable to remember anything
upon its restart (GA process). Which has BTW show flaw
in our current code with FS freeze & thaw. If we freeze guest
FS, and somebody restart GA, the simple FS Thaw will not succeed as
GA thinks FS are not frozen. But that's a different cup of tea.

Because of what written above, we need to call set-level
on every suspend.

diff to v1:
-move from misusing virDomainSuspend to brand new
 virDomainSuspendForDuration API

Michal Privoznik (5):
  qemu-agent: Allow setting supported level
  qemu-agent: Create suspend function
  Introduce virDomainSuspendForDuration API
  qemu: Wire up virDomainSuspendForDuration API
  virsh: Expose new virDomainSuspendForDuration API

 include/libvirt/libvirt.h.in |    5 ++-
 src/driver.h                 |    6 ++
 src/libvirt.c                |   58 +++++++++++++++++++++++
 src/libvirt_public.syms      |    1 +
 src/qemu/qemu_agent.c        |  105 ++++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_agent.h        |   13 +++++
 src/qemu/qemu_driver.c       |   93 +++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_process.c      |   45 +++++++++++++++++-
 src/remote/remote_driver.c   |    1 +
 src/remote/remote_protocol.x |   11 ++++-
 src/remote_protocol-structs  |    7 +++
 tools/virsh.c                |   67 +++++++++++++++++++++++++++
 tools/virsh.pod              |    8 +++
 13 files changed, 415 insertions(+), 5 deletions(-)

-- 
1.7.3.4




More information about the libvir-list mailing list