mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 11:52:20 +00:00
qemu: Use new connection close callbacks API
The qemu driver uses connection close callbacks in more places requiring more changes than other drivers, but luckily the changes are very straightforward. The migration code was written in a way ensuring that there's just one callback present so this can be preserved directly. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
ba6f53d778
commit
aa8e187fa9
@ -1311,17 +1311,22 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver,
|
|||||||
const char *defsecmodel)
|
const char *defsecmodel)
|
||||||
{
|
{
|
||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
virDomainXMLOption *ret = NULL;
|
||||||
|
|
||||||
virQEMUDriverDomainDefParserConfig.priv = driver;
|
virQEMUDriverDomainDefParserConfig.priv = driver;
|
||||||
virQEMUDriverDomainDefParserConfig.defSecModel = defsecmodel;
|
virQEMUDriverDomainDefParserConfig.defSecModel = defsecmodel;
|
||||||
virQEMUDriverDomainJobConfig.maxQueuedJobs = cfg->maxQueuedJobs;
|
virQEMUDriverDomainJobConfig.maxQueuedJobs = cfg->maxQueuedJobs;
|
||||||
|
|
||||||
return virDomainXMLOptionNew(&virQEMUDriverDomainDefParserConfig,
|
ret = virDomainXMLOptionNew(&virQEMUDriverDomainDefParserConfig,
|
||||||
&virQEMUDriverPrivateDataCallbacks,
|
&virQEMUDriverPrivateDataCallbacks,
|
||||||
&virQEMUDriverDomainXMLNamespace,
|
&virQEMUDriverDomainXMLNamespace,
|
||||||
&virQEMUDriverDomainABIStability,
|
&virQEMUDriverDomainABIStability,
|
||||||
&virQEMUDriverDomainSaveCookie,
|
&virQEMUDriverDomainSaveCookie,
|
||||||
&virQEMUDriverDomainJobConfig);
|
&virQEMUDriverDomainJobConfig);
|
||||||
|
|
||||||
|
virDomainXMLOptionSetCloseCallbackAlloc(ret, virCloseCallbacksDomainAlloc);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,9 +314,6 @@ struct _virQEMUDriver {
|
|||||||
/* Immutable pointer. lockless access */
|
/* Immutable pointer. lockless access */
|
||||||
virLockManagerPlugin *lockManager;
|
virLockManagerPlugin *lockManager;
|
||||||
|
|
||||||
/* Immutable pointer, self-clocking APIs */
|
|
||||||
virCloseCallbacks *closeCallbacks;
|
|
||||||
|
|
||||||
/* Immutable pointer, self-locking APIs */
|
/* Immutable pointer, self-locking APIs */
|
||||||
virHashAtomic *migrationErrors;
|
virHashAtomic *migrationErrors;
|
||||||
};
|
};
|
||||||
|
@ -846,9 +846,6 @@ qemuStateInitialize(bool privileged,
|
|||||||
0, S_IXGRP | S_IXOTH) < 0)
|
0, S_IXGRP | S_IXOTH) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (!(qemu_driver->closeCallbacks = virCloseCallbacksNew()))
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
/* Get all the running persistent or transient configs first */
|
/* Get all the running persistent or transient configs first */
|
||||||
if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
|
if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
|
||||||
cfg->stateDir,
|
cfg->stateDir,
|
||||||
@ -1053,7 +1050,6 @@ qemuStateCleanup(void)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
virObjectUnref(qemu_driver->migrationErrors);
|
virObjectUnref(qemu_driver->migrationErrors);
|
||||||
virObjectUnref(qemu_driver->closeCallbacks);
|
|
||||||
virLockManagerPluginUnref(qemu_driver->lockManager);
|
virLockManagerPluginUnref(qemu_driver->lockManager);
|
||||||
virSysinfoDefFree(qemu_driver->hostsysinfo);
|
virSysinfoDefFree(qemu_driver->hostsysinfo);
|
||||||
virPortAllocatorRangeFree(qemu_driver->migrationPorts);
|
virPortAllocatorRangeFree(qemu_driver->migrationPorts);
|
||||||
@ -1146,9 +1142,7 @@ static int qemuConnectClose(virConnectPtr conn)
|
|||||||
{
|
{
|
||||||
virQEMUDriver *driver = conn->privateData;
|
virQEMUDriver *driver = conn->privateData;
|
||||||
|
|
||||||
/* Get rid of callbacks registered for this conn */
|
virCloseCallbacksDomainRunForConn(driver->domains, conn);
|
||||||
virCloseCallbacksRun(driver->closeCallbacks, conn, driver->domains);
|
|
||||||
|
|
||||||
conn->privateData = NULL;
|
conn->privateData = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1371,7 +1371,7 @@ qemuDomainGetMigrationBlockers(virDomainObj *vm,
|
|||||||
* false otherwise.
|
* false otherwise.
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
qemuMigrationSrcIsAllowed(virQEMUDriver *driver G_GNUC_UNUSED,
|
||||||
virDomainObj *vm,
|
virDomainObj *vm,
|
||||||
bool remote,
|
bool remote,
|
||||||
int asyncJob,
|
int asyncJob,
|
||||||
@ -1437,7 +1437,7 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuProcessAutoDestroyActive(driver, vm)) {
|
if (virCloseCallbacksDomainIsRegistered(vm, NULL, qemuProcessAutoDestroy)) {
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||||
"%s", _("domain is marked for auto destroy"));
|
"%s", _("domain is marked for auto destroy"));
|
||||||
return false;
|
return false;
|
||||||
@ -2735,7 +2735,7 @@ qemuMigrationSrcBeginResume(virDomainObj *vm,
|
|||||||
|
|
||||||
static char *
|
static char *
|
||||||
qemuMigrationSrcBeginResumePhase(virConnectPtr conn,
|
qemuMigrationSrcBeginResumePhase(virConnectPtr conn,
|
||||||
virQEMUDriver *driver,
|
virQEMUDriver *driver G_GNUC_UNUSED,
|
||||||
virDomainObj *vm,
|
virDomainObj *vm,
|
||||||
const char *xmlin,
|
const char *xmlin,
|
||||||
char **cookieout,
|
char **cookieout,
|
||||||
@ -2753,15 +2753,12 @@ qemuMigrationSrcBeginResumePhase(virConnectPtr conn,
|
|||||||
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_BEGIN_RESUME) < 0)
|
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_BEGIN_RESUME) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
virCloseCallbacksDomainRemove(vm, NULL, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
||||||
|
|
||||||
xml = qemuMigrationSrcBeginResume(vm, xmlin, cookieout, cookieoutlen, flags);
|
xml = qemuMigrationSrcBeginResume(vm, xmlin, cookieout, cookieoutlen, flags);
|
||||||
|
|
||||||
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed) < 0)
|
|
||||||
g_clear_pointer(&xml, g_free);
|
|
||||||
|
|
||||||
if (!xml)
|
if (!xml)
|
||||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
||||||
@ -2837,9 +2834,7 @@ qemuMigrationSrcBegin(virConnectPtr conn,
|
|||||||
* This prevents any other APIs being invoked while migration is taking
|
* This prevents any other APIs being invoked while migration is taking
|
||||||
* place.
|
* place.
|
||||||
*/
|
*/
|
||||||
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed) < 0)
|
|
||||||
goto endjob;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = g_steal_pointer(&xml);
|
ret = g_steal_pointer(&xml);
|
||||||
@ -3490,8 +3485,7 @@ qemuMigrationDstPrepareResume(virQEMUDriver *driver,
|
|||||||
QEMU_MIGRATION_COOKIE_CAPS) < 0)
|
QEMU_MIGRATION_COOKIE_CAPS) < 0)
|
||||||
VIR_WARN("Unable to encode migration cookie");
|
VIR_WARN("Unable to encode migration cookie");
|
||||||
|
|
||||||
virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
|
|
||||||
if (autoPort)
|
if (autoPort)
|
||||||
priv->migrationPort = port;
|
priv->migrationPort = port;
|
||||||
@ -4031,8 +4025,7 @@ qemuMigrationSrcConfirm(virQEMUDriver *driver,
|
|||||||
if (qemuMigrationJobStartPhase(vm, phase) < 0)
|
if (qemuMigrationJobStartPhase(vm, phase) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
virCloseCallbacksDomainRemove(vm, NULL, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
||||||
|
|
||||||
ret = qemuMigrationSrcConfirmPhase(driver, vm,
|
ret = qemuMigrationSrcConfirmPhase(driver, vm,
|
||||||
@ -5285,8 +5278,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver,
|
|||||||
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_PERFORM_RESUME) < 0)
|
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_PERFORM_RESUME) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
virCloseCallbacksDomainRemove(vm, NULL, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
||||||
|
|
||||||
ret = qemuMigrationSrcPerformNative(driver, vm, NULL, uri,
|
ret = qemuMigrationSrcPerformNative(driver, vm, NULL, uri,
|
||||||
@ -5294,9 +5286,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver,
|
|||||||
cookieout, cookieoutlen, flags,
|
cookieout, cookieoutlen, flags,
|
||||||
0, NULL, NULL, 0, NULL, migParams, NULL);
|
0, NULL, NULL, 0, NULL, migParams, NULL);
|
||||||
|
|
||||||
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed) < 0)
|
|
||||||
ret = -1;
|
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
||||||
@ -6034,8 +6024,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver,
|
|||||||
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_BEGIN_RESUME) < 0)
|
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_BEGIN_RESUME) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
virCloseCallbacksDomainRemove(vm, NULL, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
||||||
} else {
|
} else {
|
||||||
if (qemuMigrationJobStart(vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
if (qemuMigrationJobStart(vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||||
@ -6167,8 +6156,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
|
|||||||
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3) < 0)
|
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
virCloseCallbacksDomainRemove(vm, NULL, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
|
|
||||||
if (qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, cookiein, cookieinlen,
|
if (qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, cookiein, cookieinlen,
|
||||||
cookieout, cookieoutlen,
|
cookieout, cookieoutlen,
|
||||||
@ -6176,9 +6164,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
|
|||||||
nmigrate_disks, migrate_disks, migParams, nbdURI) < 0)
|
nmigrate_disks, migrate_disks, migParams, nbdURI) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3_DONE));
|
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3_DONE));
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@ -6434,7 +6420,7 @@ qemuMigrationDstComplete(virQEMUDriver *driver,
|
|||||||
* nothing to remove when we are resuming post-copy migration.
|
* nothing to remove when we are resuming post-copy migration.
|
||||||
*/
|
*/
|
||||||
if (job->phase < QEMU_MIGRATION_PHASE_POSTCOPY_FAILED)
|
if (job->phase < QEMU_MIGRATION_PHASE_POSTCOPY_FAILED)
|
||||||
qemuProcessAutoDestroyRemove(driver, vm);
|
virCloseCallbacksDomainRemove(vm, NULL, qemuProcessAutoDestroy);
|
||||||
|
|
||||||
/* Remove completed stats for post-copy, everything but timing fields
|
/* Remove completed stats for post-copy, everything but timing fields
|
||||||
* is obsolete anyway.
|
* is obsolete anyway.
|
||||||
@ -6727,7 +6713,7 @@ qemuMigrationDstFinishActive(virQEMUDriver *driver,
|
|||||||
|
|
||||||
if (virDomainObjIsFailedPostcopy(vm)) {
|
if (virDomainObjIsFailedPostcopy(vm)) {
|
||||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
||||||
qemuProcessAutoDestroyRemove(driver, vm);
|
virCloseCallbacksDomainRemove(vm, NULL, qemuProcessAutoDestroy);
|
||||||
*finishJob = false;
|
*finishJob = false;
|
||||||
} else {
|
} else {
|
||||||
qemuMigrationParamsReset(vm, VIR_ASYNC_JOB_MIGRATION_IN,
|
qemuMigrationParamsReset(vm, VIR_ASYNC_JOB_MIGRATION_IN,
|
||||||
@ -6787,8 +6773,7 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||||
virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
virCloseCallbacksDomainRemove(vm, NULL, qemuMigrationAnyConnectionClosed);
|
||||||
qemuMigrationAnyConnectionClosed);
|
|
||||||
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
qemuDomainCleanupRemove(vm, qemuProcessCleanupMigrationJob);
|
||||||
} else {
|
} else {
|
||||||
qemuDomainCleanupRemove(vm, qemuMigrationDstPrepareCleanup);
|
qemuDomainCleanupRemove(vm, qemuMigrationDstPrepareCleanup);
|
||||||
|
@ -7901,9 +7901,8 @@ qemuProcessLaunch(virConnectPtr conn,
|
|||||||
qemuProcessRefreshBalloonState(vm, asyncJob) < 0)
|
qemuProcessRefreshBalloonState(vm, asyncJob) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (flags & VIR_QEMU_PROCESS_START_AUTODESTROY &&
|
if (flags & VIR_QEMU_PROCESS_START_AUTODESTROY)
|
||||||
qemuProcessAutoDestroyAdd(driver, vm, conn) < 0)
|
virCloseCallbacksDomainAdd(vm, conn, qemuProcessAutoDestroy);
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (!incoming && !snapshot) {
|
if (!incoming && !snapshot) {
|
||||||
VIR_DEBUG("Setting up transient disk");
|
VIR_DEBUG("Setting up transient disk");
|
||||||
@ -8381,7 +8380,7 @@ void qemuProcessStop(virQEMUDriver *driver,
|
|||||||
virFileDeleteTree(priv->channelTargetDir);
|
virFileDeleteTree(priv->channelTargetDir);
|
||||||
|
|
||||||
/* Stop autodestroy in case guest is restarted */
|
/* Stop autodestroy in case guest is restarted */
|
||||||
qemuProcessAutoDestroyRemove(driver, vm);
|
virCloseCallbacksDomainRemove(vm, NULL, qemuProcessAutoDestroy);
|
||||||
|
|
||||||
/* now that we know it's stopped call the hook if present */
|
/* now that we know it's stopped call the hook if present */
|
||||||
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
|
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
|
||||||
@ -8601,7 +8600,7 @@ void qemuProcessStop(virQEMUDriver *driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
void
|
||||||
qemuProcessAutoDestroy(virDomainObj *dom,
|
qemuProcessAutoDestroy(virDomainObj *dom,
|
||||||
virConnectPtr conn)
|
virConnectPtr conn)
|
||||||
{
|
{
|
||||||
@ -8641,32 +8640,6 @@ qemuProcessAutoDestroy(virDomainObj *dom,
|
|||||||
virObjectEventStateQueue(driver->domainEventState, event);
|
virObjectEventStateQueue(driver->domainEventState, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemuProcessAutoDestroyAdd(virQEMUDriver *driver,
|
|
||||||
virDomainObj *vm,
|
|
||||||
virConnectPtr conn)
|
|
||||||
{
|
|
||||||
VIR_DEBUG("vm=%s, conn=%p", vm->def->name, conn);
|
|
||||||
return virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
|
||||||
qemuProcessAutoDestroy);
|
|
||||||
}
|
|
||||||
|
|
||||||
int qemuProcessAutoDestroyRemove(virQEMUDriver *driver,
|
|
||||||
virDomainObj *vm)
|
|
||||||
{
|
|
||||||
VIR_DEBUG("vm=%s", vm->def->name);
|
|
||||||
return virCloseCallbacksUnset(driver->closeCallbacks, vm,
|
|
||||||
qemuProcessAutoDestroy);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool qemuProcessAutoDestroyActive(virQEMUDriver *driver,
|
|
||||||
virDomainObj *vm)
|
|
||||||
{
|
|
||||||
virCloseCallback cb;
|
|
||||||
VIR_DEBUG("vm=%s", vm->def->name);
|
|
||||||
cb = virCloseCallbacksGet(driver->closeCallbacks, vm, NULL);
|
|
||||||
return cb == qemuProcessAutoDestroy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
qemuProcessRefreshDisks(virDomainObj *vm,
|
qemuProcessRefreshDisks(virDomainObj *vm,
|
||||||
|
@ -168,15 +168,8 @@ int qemuProcessKill(virDomainObj *vm, unsigned int flags);
|
|||||||
|
|
||||||
void qemuProcessShutdownOrReboot(virDomainObj *vm);
|
void qemuProcessShutdownOrReboot(virDomainObj *vm);
|
||||||
|
|
||||||
int qemuProcessAutoDestroyInit(virQEMUDriver *driver);
|
void qemuProcessAutoDestroy(virDomainObj *dom,
|
||||||
void qemuProcessAutoDestroyShutdown(virQEMUDriver *driver);
|
virConnectPtr conn);
|
||||||
int qemuProcessAutoDestroyAdd(virQEMUDriver *driver,
|
|
||||||
virDomainObj *vm,
|
|
||||||
virConnectPtr conn);
|
|
||||||
int qemuProcessAutoDestroyRemove(virQEMUDriver *driver,
|
|
||||||
virDomainObj *vm);
|
|
||||||
bool qemuProcessAutoDestroyActive(virQEMUDriver *driver,
|
|
||||||
virDomainObj *vm);
|
|
||||||
|
|
||||||
int qemuProcessSetSchedParams(int id, pid_t pid, size_t nsp,
|
int qemuProcessSetSchedParams(int id, pid_t pid, size_t nsp,
|
||||||
virDomainThreadSchedParam *sp);
|
virDomainThreadSchedParam *sp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user