qemu_hotplug: Introduce and use qemuDomainDeleteDevice

The aim of this function will be to fix return value of
qemuMonitorDelDevice() in one specific case. But that is yet to
come. Right now this is nothing but a plain substitution.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
ACKed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Michal Privoznik 2019-03-12 13:49:24 +01:00
parent 641438fb75
commit 4cd13478ac

View File

@ -67,6 +67,45 @@ VIR_LOG_INIT("qemu.qemu_hotplug");
unsigned long long qemuDomainRemoveDeviceWaitTime = 1000ull * 5; unsigned long long qemuDomainRemoveDeviceWaitTime = 1000ull * 5;
/**
* qemuDomainDeleteDevice:
* @vm: domain object
* @alias: device to remove
*
* This is a wrapper over qemuMonitorDelDevice() plus enter/exit
* monitor calls. This function MUST be used instead of plain
* qemuMonitorDelDevice() in all places where @alias represents a
* device from domain XML, i.e. caller marks the device for
* removal and then calls qemuDomainWaitForDeviceRemoval()
* followed by qemuDomainRemove*Device().
*
* For collateral devices (e.g. extension devices like zPCI) it
* is safe to use plain qemuMonitorDelDevice().
*
* Upon entry, @vm must be locked.
*
* Returns: 0 on success,
* -1 otherwise.
*/
static int
qemuDomainDeleteDevice(virDomainObjPtr vm,
const char *alias)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverPtr driver = priv->driver;
int rc;
qemuDomainObjEnterMonitor(driver, vm);
rc = qemuMonitorDelDevice(priv->mon, alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
rc = -1;
return rc;
}
/** /**
* qemuHotplugPrepareDiskSourceAccess: * qemuHotplugPrepareDiskSourceAccess:
* @driver: qemu driver struct * @driver: qemu driver struct
@ -5216,7 +5255,6 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
bool async) bool async)
{ {
int ret = -1; int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
if (qemuIsMultiFunctionDevice(vm->def, &detach->info)) { if (qemuIsMultiFunctionDevice(vm->def, &detach->info)) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
@ -5228,15 +5266,11 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainMarkDeviceForRemoval(vm, &detach->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, detach->info.alias) < 0) {
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { if (virDomainObjIsActive(vm))
if (qemuDomainObjExitMonitor(driver, vm) < 0) virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
goto cleanup;
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
goto cleanup; goto cleanup;
} }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
if (async) { if (async) {
ret = 0; ret = 0;
@ -5258,7 +5292,6 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
bool async) bool async)
{ {
int ret = -1; int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
if (qemuDomainDiskBlockJobIsActive(detach)) if (qemuDomainDiskBlockJobIsActive(detach))
goto cleanup; goto cleanup;
@ -5266,15 +5299,11 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainMarkDeviceForRemoval(vm, &detach->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, detach->info.alias) < 0) {
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { if (virDomainObjIsActive(vm))
if (qemuDomainObjExitMonitor(driver, vm) < 0) virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
goto cleanup;
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
goto cleanup; goto cleanup;
} }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
if (async) { if (async) {
ret = 0; ret = 0;
@ -5455,19 +5484,18 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainMarkDeviceForRemoval(vm, &detach->info);
qemuDomainObjEnterMonitor(driver, vm); if (detach->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
if (detach->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI && int rc;
qemuDomainDetachExtensionDevice(priv->mon, &detach->info) < 0) { qemuDomainObjEnterMonitor(driver, vm);
goto exit_monitor; rc = qemuDomainDetachExtensionDevice(priv->mon, &detach->info);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
rc = -1;
if (rc < 0)
goto cleanup;
} }
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { if (qemuDomainDeleteDevice(vm, detach->info.alias) < 0)
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup;
}
exit_monitor:
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -5484,14 +5512,11 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver,
} }
static int static int
qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, qemuDomainDetachHostPCIDevice(virDomainObjPtr vm,
virDomainObjPtr vm,
virDomainHostdevDefPtr detach, virDomainHostdevDefPtr detach,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainHostdevSubsysPCIPtr pcisrc = &detach->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &detach->source.subsys.u.pci;
int ret;
if (qemuIsMultiFunctionDevice(vm->def, detach->info)) { if (qemuIsMultiFunctionDevice(vm->def, detach->info)) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
@ -5504,23 +5529,14 @@ qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, detach->info); qemuDomainMarkDeviceForRemoval(vm, detach->info);
qemuDomainObjEnterMonitor(driver, vm); return qemuDomainDeleteDevice(vm, detach->info->alias);
ret = qemuMonitorDelDevice(priv->mon, detach->info->alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
return ret;
} }
static int static int
qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver, qemuDomainDetachHostUSBDevice(virDomainObjPtr vm,
virDomainObjPtr vm,
virDomainHostdevDefPtr detach, virDomainHostdevDefPtr detach,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
int ret;
if (!detach->info->alias) { if (!detach->info->alias) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("device cannot be detached without a device alias")); "%s", _("device cannot be detached without a device alias"));
@ -5530,23 +5546,14 @@ qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, detach->info); qemuDomainMarkDeviceForRemoval(vm, detach->info);
qemuDomainObjEnterMonitor(driver, vm); return qemuDomainDeleteDevice(vm, detach->info->alias);
ret = qemuMonitorDelDevice(priv->mon, detach->info->alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
return ret;
} }
static int static int
qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr driver, qemuDomainDetachHostSCSIDevice(virDomainObjPtr vm,
virDomainObjPtr vm,
virDomainHostdevDefPtr detach, virDomainHostdevDefPtr detach,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
int ret = -1;
if (!detach->info->alias) { if (!detach->info->alias) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("device cannot be detached without a device alias")); "%s", _("device cannot be detached without a device alias"));
@ -5556,24 +5563,14 @@ qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, detach->info); qemuDomainMarkDeviceForRemoval(vm, detach->info);
qemuDomainObjEnterMonitor(driver, vm); return qemuDomainDeleteDevice(vm, detach->info->alias);
ret = qemuMonitorDelDevice(priv->mon, detach->info->alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
return -1;
return ret;
} }
static int static int
qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driver, qemuDomainDetachSCSIVHostDevice(virDomainObjPtr vm,
virDomainObjPtr vm,
virDomainHostdevDefPtr detach, virDomainHostdevDefPtr detach,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
int ret = -1;
if (!detach->info->alias) { if (!detach->info->alias) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
"%s", _("device cannot be detached without a device alias")); "%s", _("device cannot be detached without a device alias"));
@ -5583,25 +5580,15 @@ qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, detach->info); qemuDomainMarkDeviceForRemoval(vm, detach->info);
qemuDomainObjEnterMonitor(driver, vm); return qemuDomainDeleteDevice(vm, detach->info->alias);
ret = qemuMonitorDelDevice(priv->mon, detach->info->alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
return -1;
return ret;
} }
static int static int
qemuDomainDetachMediatedDevice(virQEMUDriverPtr driver, qemuDomainDetachMediatedDevice(virDomainObjPtr vm,
virDomainObjPtr vm,
virDomainHostdevDefPtr detach, virDomainHostdevDefPtr detach,
bool async) bool async)
{ {
int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
if (!detach->info->alias) { if (!detach->info->alias) {
virReportError(VIR_ERR_OPERATION_FAILED, "%s", virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("device cannot be detached without a device alias")); _("device cannot be detached without a device alias"));
@ -5611,12 +5598,7 @@ qemuDomainDetachMediatedDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, detach->info); qemuDomainMarkDeviceForRemoval(vm, detach->info);
qemuDomainObjEnterMonitor(driver, vm); return qemuDomainDeleteDevice(vm, detach->info->alias);
ret = qemuMonitorDelDevice(priv->mon, detach->info->alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
return ret;
} }
@ -5633,19 +5615,19 @@ qemuDomainDetachThisHostDevice(virQEMUDriverPtr driver,
switch (detach->source.subsys.type) { switch (detach->source.subsys.type) {
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
ret = qemuDomainDetachHostPCIDevice(driver, vm, detach, async); ret = qemuDomainDetachHostPCIDevice(vm, detach, async);
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
ret = qemuDomainDetachHostUSBDevice(driver, vm, detach, async); ret = qemuDomainDetachHostUSBDevice(vm, detach, async);
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
ret = qemuDomainDetachHostSCSIDevice(driver, vm, detach, async); ret = qemuDomainDetachHostSCSIDevice(vm, detach, async);
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
ret = qemuDomainDetachSCSIVHostDevice(driver, vm, detach, async); ret = qemuDomainDetachSCSIVHostDevice(vm, detach, async);
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
ret = qemuDomainDetachMediatedDevice(driver, vm, detach, async); ret = qemuDomainDetachMediatedDevice(vm, detach, async);
break; break;
default: default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@ -5762,7 +5744,6 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver,
int ret = -1; int ret = -1;
ssize_t idx = -1; ssize_t idx = -1;
virDomainShmemDefPtr shmem = NULL; virDomainShmemDefPtr shmem = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
if ((idx = virDomainShmemDefFind(vm->def, dev)) < 0) { if ((idx = virDomainShmemDefFind(vm->def, dev)) < 0) {
virReportError(VIR_ERR_DEVICE_MISSING, virReportError(VIR_ERR_DEVICE_MISSING,
@ -5791,12 +5772,7 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &shmem->info); qemuDomainMarkDeviceForRemoval(vm, &shmem->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, shmem->info.alias) < 0)
if (qemuMonitorDelDevice(priv->mon, shmem->info.alias) < 0) {
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup;
}
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -5821,7 +5797,6 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver,
{ {
int ret = -1; int ret = -1;
virDomainWatchdogDefPtr watchdog = vm->def->watchdog; virDomainWatchdogDefPtr watchdog = vm->def->watchdog;
qemuDomainObjPrivatePtr priv = vm->privateData;
if (!watchdog) { if (!watchdog) {
virReportError(VIR_ERR_DEVICE_MISSING, "%s", virReportError(VIR_ERR_DEVICE_MISSING, "%s",
@ -5852,12 +5827,7 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &watchdog->info); qemuDomainMarkDeviceForRemoval(vm, &watchdog->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, watchdog->info.alias) < 0)
if (qemuMonitorDelDevice(priv->mon, watchdog->info.alias) < 0) {
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup;
}
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -5881,7 +5851,6 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
bool async) bool async)
{ {
int ret = -1; int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainRedirdevDefPtr tmpRedirdevDef; virDomainRedirdevDefPtr tmpRedirdevDef;
ssize_t idx; ssize_t idx;
@ -5902,12 +5871,7 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info); qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, tmpRedirdevDef->info.alias) < 0)
if (qemuMonitorDelDevice(priv->mon, tmpRedirdevDef->info.alias) < 0) {
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup;
}
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -5932,7 +5896,6 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
{ {
int detachidx, ret = -1; int detachidx, ret = -1;
virDomainNetDefPtr detach = NULL; virDomainNetDefPtr detach = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
if ((detachidx = virDomainNetFindIdx(vm->def, dev->data.net)) < 0) if ((detachidx = virDomainNetFindIdx(vm->def, dev->data.net)) < 0)
goto cleanup; goto cleanup;
@ -5973,15 +5936,11 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainMarkDeviceForRemoval(vm, &detach->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, detach->info.alias) < 0) {
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { if (virDomainObjIsActive(vm))
if (qemuDomainObjExitMonitor(driver, vm) < 0) virDomainAuditNet(vm, detach, NULL, "detach", false);
goto cleanup;
virDomainAuditNet(vm, detach, NULL, "detach", false);
goto cleanup; goto cleanup;
} }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
if (async) { if (async) {
ret = 0; ret = 0;
@ -6144,20 +6103,19 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
if (!async && !guestfwd) if (!async && !guestfwd)
qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info); qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info);
qemuDomainObjEnterMonitor(driver, vm);
if (guestfwd) { if (guestfwd) {
if (qemuMonitorRemoveNetdev(priv->mon, tmpChr->info.alias) < 0) { int rc;
ignore_value(qemuDomainObjExitMonitor(driver, vm)); qemuDomainObjEnterMonitor(driver, vm);
rc = qemuMonitorRemoveNetdev(priv->mon, tmpChr->info.alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
rc = -1;
if (rc < 0)
goto cleanup; goto cleanup;
}
} else { } else {
if (qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0) { if (qemuDomainDeleteDevice(vm, tmpChr->info.alias) < 0)
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup; goto cleanup;
}
} }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
if (guestfwd) { if (guestfwd) {
ret = qemuDomainRemoveChrDevice(driver, vm, tmpChr, false); ret = qemuDomainRemoveChrDevice(driver, vm, tmpChr, false);
@ -6181,10 +6139,8 @@ qemuDomainDetachRNGDevice(virQEMUDriverPtr driver,
virDomainRNGDefPtr rng, virDomainRNGDefPtr rng,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
ssize_t idx; ssize_t idx;
virDomainRNGDefPtr tmpRNG; virDomainRNGDefPtr tmpRNG;
int rc;
int ret = -1; int ret = -1;
if ((idx = virDomainRNGFind(vm->def, rng)) < 0) { if ((idx = virDomainRNGFind(vm->def, rng)) < 0) {
@ -6206,9 +6162,7 @@ qemuDomainDetachRNGDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &tmpRNG->info); qemuDomainMarkDeviceForRemoval(vm, &tmpRNG->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, tmpRNG->info.alias) < 0)
rc = qemuMonitorDelDevice(priv->mon, tmpRNG->info.alias);
if (qemuDomainObjExitMonitor(driver, vm) || rc < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -6231,10 +6185,8 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver,
virDomainMemoryDefPtr memdef, virDomainMemoryDefPtr memdef,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainMemoryDefPtr mem; virDomainMemoryDefPtr mem;
int idx; int idx;
int rc;
int ret = -1; int ret = -1;
qemuDomainMemoryDeviceAlignSize(vm->def, memdef); qemuDomainMemoryDeviceAlignSize(vm->def, memdef);
@ -6258,9 +6210,7 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &mem->info); qemuDomainMarkDeviceForRemoval(vm, &mem->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, mem->info.alias) < 0)
rc = qemuMonitorDelDevice(priv->mon, mem->info.alias);
if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -6365,15 +6315,9 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
qemuDomainMarkDeviceAliasForRemoval(vm, vcpupriv->alias); qemuDomainMarkDeviceAliasForRemoval(vm, vcpupriv->alias);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, vcpupriv->alias) < 0) {
if (virDomainObjIsActive(vm))
rc = qemuMonitorDelDevice(qemuDomainGetMonitor(vm), vcpupriv->alias); virDomainAuditVcpu(vm, oldvcpus, oldvcpus - nvcpus, "update", false);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
if (rc < 0) {
virDomainAuditVcpu(vm, oldvcpus, oldvcpus - nvcpus, "update", false);
goto cleanup; goto cleanup;
} }
@ -6943,8 +6887,6 @@ qemuDomainDetachInputDevice(virDomainObjPtr vm,
virDomainInputDefPtr def, virDomainInputDefPtr def,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverPtr driver = priv->driver;
virDomainInputDefPtr input; virDomainInputDefPtr input;
int ret = -1; int ret = -1;
int idx; int idx;
@ -6974,12 +6916,7 @@ qemuDomainDetachInputDevice(virDomainObjPtr vm,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &input->info); qemuDomainMarkDeviceForRemoval(vm, &input->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, input->info.alias) < 0)
if (qemuMonitorDelDevice(priv->mon, input->info.alias) < 0) {
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup;
}
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {
@ -7001,8 +6938,6 @@ qemuDomainDetachVsockDevice(virDomainObjPtr vm,
virDomainVsockDefPtr dev, virDomainVsockDefPtr dev,
bool async) bool async)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverPtr driver = priv->driver;
virDomainVsockDefPtr vsock = vm->def->vsock; virDomainVsockDefPtr vsock = vm->def->vsock;
int ret = -1; int ret = -1;
@ -7017,12 +6952,7 @@ qemuDomainDetachVsockDevice(virDomainObjPtr vm,
if (!async) if (!async)
qemuDomainMarkDeviceForRemoval(vm, &vsock->info); qemuDomainMarkDeviceForRemoval(vm, &vsock->info);
qemuDomainObjEnterMonitor(driver, vm); if (qemuDomainDeleteDevice(vm, vsock->info.alias) < 0)
if (qemuMonitorDelDevice(priv->mon, vsock->info.alias) < 0) {
ignore_value(qemuDomainObjExitMonitor(driver, vm));
goto cleanup;
}
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
if (async) { if (async) {