[libvirt] [RFC v1 6/6] managedsave: add managedsave support for ephemeral host devices

Chen Fan chen.fan.fnst at cn.fujitsu.com
Wed May 13 03:36:32 UTC 2015


Signed-off-by: Chen Fan <chen.fan.fnst at cn.fujitsu.com>
---
 src/qemu/qemu_driver.c  | 8 ++++++++
 src/qemu/qemu_process.c | 3 ++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 86d93d2..112acb1 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3208,6 +3208,10 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
     /* Pause */
     if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
         was_running = true;
+        /* Detach ephemeral host devices first */
+        if (qemuMigrationDetachEphemeralDevices(driver, vm, true) < 0)
+            goto endjob;
+
         if (qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_SAVE,
                                 QEMU_ASYNC_JOB_SAVE) < 0)
             goto endjob;
@@ -3249,6 +3253,8 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
                                                           VIR_DOMAIN_EVENT_SUSPENDED,
                                                           VIR_DOMAIN_EVENT_SUSPENDED_API_ERROR);
             }
+            qemuMigrationRestoreEphemeralDevices(driver, dom->conn, vm, true);
+
             virSetError(save_err);
             virFreeError(save_err);
         }
@@ -6404,6 +6410,8 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
     if (event)
         qemuDomainEventQueue(driver, event);
 
+    /* Restore ephemeral devices */
+    qemuMigrationRestoreEphemeralDevices(driver, NULL, vm, true);
 
     /* If it was running before, resume it now unless caller requested pause. */
     if (header->was_running && !start_paused) {
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 904c447..6519477 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4501,7 +4501,8 @@ int qemuProcessStart(virConnectPtr conn,
      * during migration. hence we should remove the reserved
      * PCI address for ephemeral device.
      */
-    if (vmop == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START)
+    if (vmop == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START ||
+        vmop == VIR_NETDEV_VPORT_PROFILE_OP_RESTORE)
         if (qemuMigrationDetachEphemeralDevices(driver, vm, false) < 0)
             goto cleanup;
 
-- 
1.9.3




More information about the libvir-list mailing list