mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Remove special case for virDomainSuspend
This commit is contained in:
parent
63d15036cc
commit
ad6cc26c8d
@ -74,7 +74,6 @@ enum qemuDomainAsyncJob {
|
|||||||
|
|
||||||
enum qemuDomainJobSignals {
|
enum qemuDomainJobSignals {
|
||||||
QEMU_JOB_SIGNAL_CANCEL = 1 << 0, /* Request job cancellation */
|
QEMU_JOB_SIGNAL_CANCEL = 1 << 0, /* Request job cancellation */
|
||||||
QEMU_JOB_SIGNAL_SUSPEND = 1 << 1, /* Request VM suspend to finish live migration offline */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct qemuDomainJobObj {
|
struct qemuDomainJobObj {
|
||||||
|
@ -1331,6 +1331,8 @@ static int qemudDomainSuspend(virDomainPtr dom) {
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
virDomainEventPtr event = NULL;
|
virDomainEventPtr event = NULL;
|
||||||
qemuDomainObjPrivatePtr priv;
|
qemuDomainObjPrivatePtr priv;
|
||||||
|
virDomainPausedReason reason;
|
||||||
|
int eventDetail;
|
||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||||
@ -1357,14 +1359,13 @@ static int qemudDomainSuspend(virDomainPtr dom) {
|
|||||||
priv = vm->privateData;
|
priv = vm->privateData;
|
||||||
|
|
||||||
if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_OUT) {
|
if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_OUT) {
|
||||||
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
|
reason = VIR_DOMAIN_PAUSED_MIGRATION;
|
||||||
VIR_DEBUG("Requesting domain pause on %s",
|
eventDetail = VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED;
|
||||||
vm->def->name);
|
|
||||||
priv->job.signals |= QEMU_JOB_SIGNAL_SUSPEND;
|
|
||||||
}
|
|
||||||
ret = 0;
|
|
||||||
goto cleanup;
|
|
||||||
} else {
|
} else {
|
||||||
|
reason = VIR_DOMAIN_PAUSED_USER;
|
||||||
|
eventDetail = VIR_DOMAIN_EVENT_SUSPENDED_PAUSED;
|
||||||
|
}
|
||||||
|
|
||||||
if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_SUSPEND) < 0)
|
if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_SUSPEND) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -1374,17 +1375,16 @@ static int qemudDomainSuspend(virDomainPtr dom) {
|
|||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
|
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
|
||||||
if (qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_USER) < 0) {
|
if (qemuProcessStopCPUs(driver, vm, reason) < 0) {
|
||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
event = virDomainEventNewFromObj(vm,
|
event = virDomainEventNewFromObj(vm,
|
||||||
VIR_DOMAIN_EVENT_SUSPENDED,
|
VIR_DOMAIN_EVENT_SUSPENDED,
|
||||||
VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
|
eventDetail);
|
||||||
}
|
}
|
||||||
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
|
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
|
||||||
goto endjob;
|
goto endjob;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
|
||||||
|
|
||||||
endjob:
|
endjob:
|
||||||
if (qemuDomainObjEndJob(driver, vm) == 0)
|
if (qemuDomainObjEndJob(driver, vm) == 0)
|
||||||
|
@ -770,11 +770,6 @@ qemuMigrationProcessJobSignals(struct qemud_driver *driver,
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
VIR_WARN("Unable to cancel job");
|
VIR_WARN("Unable to cancel job");
|
||||||
}
|
}
|
||||||
} else if (priv->job.signals & QEMU_JOB_SIGNAL_SUSPEND) {
|
|
||||||
priv->job.signals ^= QEMU_JOB_SIGNAL_SUSPEND;
|
|
||||||
VIR_DEBUG("Pausing domain for non-live migration");
|
|
||||||
if (qemuMigrationSetOffline(driver, vm) < 0)
|
|
||||||
VIR_WARN("Unable to pause domain");
|
|
||||||
} else {
|
} else {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
@ -2861,6 +2856,7 @@ qemuMigrationJobStart(struct qemud_driver *driver,
|
|||||||
qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
|
qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
|
||||||
} else {
|
} else {
|
||||||
qemuDomainObjSetAsyncJobMask(vm, DEFAULT_JOB_MASK |
|
qemuDomainObjSetAsyncJobMask(vm, DEFAULT_JOB_MASK |
|
||||||
|
JOB_MASK(QEMU_JOB_SUSPEND) |
|
||||||
JOB_MASK(QEMU_JOB_MIGRATION_OP));
|
JOB_MASK(QEMU_JOB_MIGRATION_OP));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user