diff mbox

[02/18] savevm: export qemu_save_device_state()

Message ID 1377069536-12658-3-git-send-email-lilei@linux.vnet.ibm.com
State New
Headers show

Commit Message

Lei Li Aug. 21, 2013, 7:18 a.m. UTC
Export qemu_save_device_state() for localhost migration.

Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
---
 include/sysemu/sysemu.h |    1 +
 savevm.c                |    7 ++++++-
 2 files changed, 7 insertions(+), 1 deletions(-)

Comments

Paolo Bonzini Aug. 21, 2013, 11:13 a.m. UTC | #1
Il 21/08/2013 09:18, Lei Li ha scritto:
> Export qemu_save_device_state() for localhost migration.
> 
> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
> ---
>  include/sysemu/sysemu.h |    1 +
>  savevm.c                |    7 ++++++-
>  2 files changed, 7 insertions(+), 1 deletions(-)
> 
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index d7a77b6..f1f15f4 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -80,6 +80,7 @@ int qemu_savevm_state_iterate(QEMUFile *f);
>  void qemu_savevm_state_complete(QEMUFile *f);
>  void qemu_savevm_state_cancel(void);
>  uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size);
> +int qemu_save_device_state(QEMUFile *f);
>  int qemu_loadvm_state(QEMUFile *f);
>  
>  /* SLIRP */
> diff --git a/savevm.c b/savevm.c
> index 03fc4d9..f89e979 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -2049,7 +2049,12 @@ static int qemu_savevm_state(QEMUFile *f)
>      return ret;
>  }
>  
> -static int qemu_save_device_state(QEMUFile *f)
> +/**
> + * Save all of the device states to stream QEMUFile
> + *
> + * Return negative if there has been an error
> + **/
> +int qemu_save_device_state(QEMUFile *f)
>  {
>      SaveStateEntry *se;
>  
> 

This should also not be needed.  Device state will be sent on the Unix
socket, while page data will be sent on the pipe.

I suggest you start from scratch.  Do a simple RFC series that does
normal live migration with dirty bitmap, but uses a side channel (pipe
passed via SCM_RIGHTS) for RAM.  This will ensure you get the hooks right.

Then you have two things to work on: (1) make the capability enforce
non-live migration, probably by adding another RunState and adding it to
runstate_needs_reset; (2) improve the hooks to use vmsplice.

Paolo
diff mbox

Patch

diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index d7a77b6..f1f15f4 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -80,6 +80,7 @@  int qemu_savevm_state_iterate(QEMUFile *f);
 void qemu_savevm_state_complete(QEMUFile *f);
 void qemu_savevm_state_cancel(void);
 uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size);
+int qemu_save_device_state(QEMUFile *f);
 int qemu_loadvm_state(QEMUFile *f);
 
 /* SLIRP */
diff --git a/savevm.c b/savevm.c
index 03fc4d9..f89e979 100644
--- a/savevm.c
+++ b/savevm.c
@@ -2049,7 +2049,12 @@  static int qemu_savevm_state(QEMUFile *f)
     return ret;
 }
 
-static int qemu_save_device_state(QEMUFile *f)
+/**
+ * Save all of the device states to stream QEMUFile
+ *
+ * Return negative if there has been an error
+ **/
+int qemu_save_device_state(QEMUFile *f)
 {
     SaveStateEntry *se;