@@ -13857,7 +13857,9 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom,
13857
13857
virQEMUDriverPtr driver = dom->conn->privateData;
13858
13858
virDomainObjPtr vm;
13859
13859
qemuDomainObjPrivatePtr priv;
13860
+ g_autoptr(qemuMigrationParams) migParams = NULL;
13860
13861
int ret = -1;
13862
+ int rc;
13861
13863
13862
13864
virCheckFlags(0, -1);
13863
13865
@@ -13876,10 +13878,27 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom,
13876
13878
priv = vm->privateData;
13877
13879
13878
13880
VIR_DEBUG("Setting migration downtime to %llums", downtime);
13879
- qemuDomainObjEnterMonitor(driver, vm);
13880
- ret = qemuMonitorSetMigrationDowntime(priv->mon, downtime);
13881
- if (qemuDomainObjExitMonitor(driver, vm) < 0)
13882
- ret = -1;
13881
+
13882
+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_DOWNTIME)) {
13883
+ if (!(migParams = qemuMigrationParamsNew()))
13884
+ goto endjob;
13885
+
13886
+ if (qemuMigrationParamsSetULL(migParams,
13887
+ QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT,
13888
+ downtime) < 0)
13889
+ goto endjob;
13890
+
13891
+ if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_NONE,
13892
+ migParams) < 0)
13893
+ goto endjob;
13894
+ } else {
13895
+ qemuDomainObjEnterMonitor(driver, vm);
13896
+ rc = qemuMonitorSetMigrationDowntime(priv->mon, downtime);
13897
+ if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
13898
+ goto endjob;
13899
+ }
13900
+
13901
+ ret = 0;
13883
13902
13884
13903
endjob:
13885
13904
qemuDomainObjEndJob(driver, vm);
0 commit comments