* to have finer control. */
if (virDomainObjIsActive(vm)) {
/* Transitions 5, 6, 8, 9 */
- /* Check for ABI compatibility. We need to do this check against
- * the migratable XML or it will always fail otherwise */
- bool compatible;
-
- /* Replace the CPU in config and put the original one in priv
- * once we're done. When we have the updated CPU def in the
- * cookie, we don't want to replace the CPU in migratable def
- * when doing ABI checks to make sure the current CPU exactly
- * matches the one used at the time the snapshot was taken.
- */
- if (cookie && cookie->cpu && config->cpu) {
- origCPU = config->cpu;
- if (!(config->cpu = virCPUDefCopy(cookie->cpu)))
- goto endjob;
-
- compatible = qemuDomainDefCheckABIStability(driver,
- priv->qemuCaps,
- vm->def,
- config);
- } else {
- compatible = qemuDomainCheckABIStability(driver, vm, config);
- }
-
- /* If using VM GenID, there is no way currently to change
- * the genid for the running guest, so set an error,
- * mark as incompatible, and don't allow change of genid
- * if the revert force flag would start the guest again. */
- if (compatible && config->genidRequested) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("domain genid update requires restart"));
- compatible = false;
- start_flags &= ~VIR_QEMU_PROCESS_START_GEN_VMID;
- }
-
- if (!compatible) {
- virErrorPtr err = virGetLastError();
-
- if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
- /* Re-spawn error using correct category. */
- if (err->code == VIR_ERR_CONFIG_UNSUPPORTED)
- virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, "%s",
- err->str2);
- goto endjob;
- }
- virResetError(err);
- qemuProcessStop(driver, vm,
- VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT,
- QEMU_ASYNC_JOB_START, 0);
- virDomainAuditStop(vm, "from-snapshot");
- detail = VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT;
- event = virDomainEventLifecycleNewFromObj(vm,
- VIR_DOMAIN_EVENT_STOPPED,
- detail);
- virObjectEventStateQueue(driver->domainEventState, event);
- goto load;
- }
+ qemuProcessStop(driver, vm,
+ VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT,
+ QEMU_ASYNC_JOB_START, 0);
+ virDomainAuditStop(vm, "from-snapshot");
+ detail = VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT;
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_STOPPED,
+ detail);
+ virObjectEventStateQueue(driver->domainEventState, event);
+ goto load;
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
/* Transitions 5, 6 */