mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: Introduce qemuProcessFinishStartup
Finishes starting a new domain launched by qemuProcessLaunch. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
f618d662ca
commit
0004ddf0f6
@ -5065,6 +5065,53 @@ qemuProcessLaunch(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemuProcessFinishStartup:
|
||||||
|
*
|
||||||
|
* Finish starting a new domain.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
qemuProcessFinishStartup(virConnectPtr conn,
|
||||||
|
virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
qemuDomainAsyncJob asyncJob,
|
||||||
|
bool startCPUs,
|
||||||
|
virDomainPausedReason pausedReason)
|
||||||
|
{
|
||||||
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (startCPUs) {
|
||||||
|
VIR_DEBUG("Starting domain CPUs");
|
||||||
|
if (qemuProcessStartCPUs(driver, vm, conn,
|
||||||
|
VIR_DOMAIN_RUNNING_BOOTED,
|
||||||
|
asyncJob) < 0) {
|
||||||
|
if (!virGetLastError())
|
||||||
|
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||||
|
_("resume operation failed"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, pausedReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
VIR_DEBUG("Writing domain status to disk");
|
||||||
|
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuProcessStartHook(driver, vm,
|
||||||
|
VIR_HOOK_QEMU_OP_STARTED,
|
||||||
|
VIR_HOOK_SUBOP_BEGIN) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
virObjectUnref(cfg);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
qemuProcessStart(virConnectPtr conn,
|
qemuProcessStart(virConnectPtr conn,
|
||||||
virQEMUDriverPtr driver,
|
virQEMUDriverPtr driver,
|
||||||
@ -5077,7 +5124,6 @@ qemuProcessStart(virConnectPtr conn,
|
|||||||
virNetDevVPortProfileOp vmop,
|
virNetDevVPortProfileOp vmop,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
qemuProcessIncomingDefPtr incoming = NULL;
|
qemuProcessIncomingDefPtr incoming = NULL;
|
||||||
unsigned int stopFlags;
|
unsigned int stopFlags;
|
||||||
@ -5120,31 +5166,11 @@ qemuProcessStart(virConnectPtr conn,
|
|||||||
qemuMigrationRunIncoming(driver, vm, incoming->deferredURI, asyncJob) < 0)
|
qemuMigrationRunIncoming(driver, vm, incoming->deferredURI, asyncJob) < 0)
|
||||||
goto stop;
|
goto stop;
|
||||||
|
|
||||||
if (!(flags & VIR_QEMU_PROCESS_START_PAUSED)) {
|
if (qemuProcessFinishStartup(conn, driver, vm, asyncJob,
|
||||||
VIR_DEBUG("Starting domain CPUs");
|
!(flags & VIR_QEMU_PROCESS_START_PAUSED),
|
||||||
/* Allow the CPUS to start executing */
|
incoming ?
|
||||||
if (qemuProcessStartCPUs(driver, vm, conn,
|
VIR_DOMAIN_PAUSED_MIGRATION :
|
||||||
VIR_DOMAIN_RUNNING_BOOTED,
|
VIR_DOMAIN_PAUSED_USER) < 0)
|
||||||
asyncJob) < 0) {
|
|
||||||
if (virGetLastError() == NULL)
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
"%s", _("resume operation failed"));
|
|
||||||
goto stop;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,
|
|
||||||
incoming ?
|
|
||||||
VIR_DOMAIN_PAUSED_MIGRATION :
|
|
||||||
VIR_DOMAIN_PAUSED_USER);
|
|
||||||
}
|
|
||||||
|
|
||||||
VIR_DEBUG("Writing domain status to disk");
|
|
||||||
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
|
|
||||||
goto stop;
|
|
||||||
|
|
||||||
if (qemuProcessStartHook(driver, vm,
|
|
||||||
VIR_HOOK_QEMU_OP_STARTED,
|
|
||||||
VIR_HOOK_SUBOP_BEGIN) < 0)
|
|
||||||
goto stop;
|
goto stop;
|
||||||
|
|
||||||
/* Keep watching qemu log for errors during incoming migration, otherwise
|
/* Keep watching qemu log for errors during incoming migration, otherwise
|
||||||
@ -5155,7 +5181,6 @@ qemuProcessStart(virConnectPtr conn,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virObjectUnref(cfg);
|
|
||||||
qemuProcessIncomingDefFree(incoming);
|
qemuProcessIncomingDefFree(incoming);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -94,6 +94,13 @@ int qemuProcessLaunch(virConnectPtr conn,
|
|||||||
virNetDevVPortProfileOp vmop,
|
virNetDevVPortProfileOp vmop,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
int qemuProcessFinishStartup(virConnectPtr conn,
|
||||||
|
virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
qemuDomainAsyncJob asyncJob,
|
||||||
|
bool startCPUs,
|
||||||
|
virDomainPausedReason pausedReason);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_QEMU_PROCESS_STOP_MIGRATED = 1 << 0,
|
VIR_QEMU_PROCESS_STOP_MIGRATED = 1 << 0,
|
||||||
VIR_QEMU_PROCESS_STOP_NO_RELABEL = 1 << 1,
|
VIR_QEMU_PROCESS_STOP_NO_RELABEL = 1 << 1,
|
||||||
|
Loading…
Reference in New Issue
Block a user