qemuDomainObjPrivatePtr priv = vm->privateData;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
size_t i;
- int ret = -1;
/* disk secrets are prepared when preparing disks */
for (i = 0; i < vm->def->nhostdevs; i++) {
if (qemuDomainSecretHostdevPrepare(priv,
vm->def->hostdevs[i]) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->nserials; i++) {
if (qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->serials[i]->info.alias,
vm->def->serials[i]->source) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->nparallels; i++) {
if (qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->parallels[i]->info.alias,
vm->def->parallels[i]->source) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->nchannels; i++) {
if (qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->channels[i]->info.alias,
vm->def->channels[i]->source) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->nconsoles; i++) {
if (qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->consoles[i]->info.alias,
vm->def->consoles[i]->source) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->nsmartcards; i++)
qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->smartcards[i]->info.alias,
vm->def->smartcards[i]->data.passthru) < 0)
- goto cleanup;
+ return -1;
for (i = 0; i < vm->def->nrngs; i++) {
if (vm->def->rngs[i]->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->rngs[i]->info.alias,
vm->def->rngs[i]->source.chardev) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->nredirdevs; i++) {
if (qemuDomainSecretChardevPrepare(cfg, priv,
vm->def->redirdevs[i]->info.alias,
vm->def->redirdevs[i]->source) < 0)
- goto cleanup;
+ return -1;
}
for (i = 0; i < vm->def->ngraphics; i++) {
if (qemuDomainSecretGraphicsPrepare(cfg, priv, vm->def->graphics[i]) < 0)
- goto cleanup;
+ return -1;
}
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
qemuDomainObjPrivatePtr priv = vm->privateData;
g_autofree char *domname = virDomainDefGetShortName(vm->def);
- int ret = -1;
if (!domname)
- goto cleanup;
+ return -1;
if (!priv->libDir)
priv->libDir = g_strdup_printf("%s/domain-%s", cfg->libDir, domname);
priv->channelTargetDir = g_strdup_printf("%s/domain-%s",
cfg->channelTargetDir, domname);
- ret = 0;
- cleanup:
- return ret;
+ return 0;
}
qemuDomainStorageSourcePrivatePtr priv;
g_autofree char *authalias = NULL;
g_autofree char *encalias = NULL;
- int ret = -1;
src->nodestorage = virXPathString("string(./nodenames/nodename[@type='storage']/@name)", ctxt);
src->nodeformat = virXPathString("string(./nodenames/nodename[@type='format']/@name)", ctxt);
if (authalias || encalias) {
if (!src->privateData &&
!(src->privateData = qemuDomainStorageSourcePrivateNew()))
- goto cleanup;
+ return -1;
priv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
- goto cleanup;
+ return -1;
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
- goto cleanup;
+ return -1;
}
if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0)
- goto cleanup;
-
- ret = 0;
-
- cleanup:
+ return -1;
- return ret;
+ return 0;
}
{
g_autofree char *nodeset = NULL;
g_autofree char *cpuset = NULL;
- int ret = -1;
if (!priv->autoNodeset && !priv->autoCpuset)
return 0;
if (priv->autoNodeset &&
!((nodeset = virBitmapFormat(priv->autoNodeset))))
- goto cleanup;
+ return -1;
if (priv->autoCpuset &&
!((cpuset = virBitmapFormat(priv->autoCpuset))))
- goto cleanup;
+ return -1;
virBufferAddLit(buf, "<numad");
virBufferEscapeString(buf, " nodeset='%s'", nodeset);
virBufferEscapeString(buf, " cpuset='%s'", cpuset);
virBufferAddLit(buf, "/>\n");
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
g_autofree char *idstr = NULL;
g_autofree char *pidstr = NULL;
unsigned int tmp;
- int ret = -1;
idstr = virXMLPropString(node, "id");
(virStrToLong_uip(idstr, NULL, 10, &idx) < 0)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse vcpu index '%s'"), idstr);
- goto cleanup;
+ return -1;
}
if (!(vcpu = virDomainDefGetVcpu(def, idx))) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid vcpu index '%u'"), idx);
- goto cleanup;
+ return -1;
}
if (!(pidstr = virXMLPropString(node, "pid")))
- goto cleanup;
+ return -1;
if (virStrToLong_uip(pidstr, NULL, 10, &tmp) < 0)
- goto cleanup;
+ return -1;
QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = tmp;
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
g_autofree char *cpuset = NULL;
int nodesetSize = 0;
size_t i;
- int ret = -1;
nodeset = virXPathString("string(./numad/@nodeset)", ctxt);
cpuset = virXPathString("string(./numad/@cpuset)", ctxt);
return 0;
if (!(caps = virQEMUDriverGetHostNUMACaps(driver)))
- goto cleanup;
+ return -1;
/* Figure out how big the nodeset bitmap needs to be.
* This is necessary because NUMA node IDs are not guaranteed to
if (nodeset &&
virBitmapParse(nodeset, &priv->autoNodeset, nodesetSize) < 0)
- goto cleanup;
+ return -1;
if (cpuset) {
if (virBitmapParse(cpuset, &priv->autoCpuset, VIR_DOMAIN_CPUMASK_LEN) < 0)
- goto cleanup;
+ return -1;
} else {
/* autoNodeset is present in this case, since otherwise we wouldn't
* reach this code */
if (!(priv->autoCpuset = virCapabilitiesHostNUMAGetCpus(caps,
priv->autoNodeset)))
- goto cleanup;
+ return -1;
}
- ret = 0;
-
- cleanup:
-
- return ret;
+ return 0;
}
qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
virTristateBool *allowReboot)
{
- int ret = -1;
int val;
g_autofree char *valStr = NULL;
if ((val = virTristateBoolTypeFromString(valStr)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid allowReboot value '%s'"), valStr);
- goto cleanup;
+ return -1;
}
*allowReboot = val;
}
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
g_autofree xmlNodePtr *nodes = NULL;
size_t i;
int n;
- int ret = -1;
if ((n = virXPathNodeSet("./disk[@migrating='yes']", ctxt, &nodes)) < 0)
- goto cleanup;
+ return -1;
if (n > 0) {
if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) {
if (qemuDomainObjPrivateXMLParseJobNBDSource(nodes[i], ctxt,
disk,
priv->driver->xmlopt) < 0)
- goto cleanup;
+ return -1;
}
}
}
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
{
VIR_XPATH_NODE_AUTORESTORE(ctxt);
g_autofree char *tmp = NULL;
- int ret = -1;
- if (!(ctxt->node = virXPathNode("./job[1]", ctxt))) {
- ret = 0;
- goto cleanup;
- }
+ if (!(ctxt->node = virXPathNode("./job[1]", ctxt)))
+ return 0;
if ((tmp = virXPathString("string(@type)", ctxt))) {
int type;
if ((type = qemuDomainJobTypeFromString(tmp)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown job type %s"), tmp);
- goto cleanup;
+ return -1;
}
VIR_FREE(tmp);
priv->job.active = type;
if ((async = qemuDomainAsyncJobTypeFromString(tmp)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown async job type %s"), tmp);
- goto cleanup;
+ return -1;
}
VIR_FREE(tmp);
priv->job.asyncJob = async;
if (priv->job.phase < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown job phase %s"), tmp);
- goto cleanup;
+ return -1;
}
VIR_FREE(tmp);
}
if (virXPathULongHex("string(@flags)", ctxt, &priv->job.apiFlags) == -2) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid job flags"));
- goto cleanup;
+ return -1;
}
if (qemuDomainObjPrivateXMLParseJobNBD(vm, priv, ctxt) < 0)
- goto cleanup;
+ return -1;
if (qemuMigrationParamsParse(ctxt, &priv->job.migParams) < 0)
- goto cleanup;
-
- ret = 0;
+ return -1;
- cleanup:
- return ret;
+ return 0;
}
virQEMUDriverPtr driver = opaque;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
g_autoptr(virQEMUCaps) qemuCaps = NULL;
- int ret = -1;
size_t i;
if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
def->emulator)))
- goto cleanup;
+ return -1;
if (def->os.type != VIR_DOMAIN_OSTYPE_HVM) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Emulator '%s' does not support os type '%s'"),
def->emulator, virDomainOSTypeToString(def->os.type));
- goto cleanup;
+ return -1;
}
if (!virQEMUCapsIsArchSupported(qemuCaps, def->os.arch)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Emulator '%s' does not support arch '%s'"),
def->emulator, virArchToString(def->os.arch));
- goto cleanup;
+ return -1;
}
if (!virQEMUCapsIsVirtTypeSupported(qemuCaps, def->virtType)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Emulator '%s' does not support virt type '%s'"),
def->emulator, virDomainVirtTypeToString(def->virtType));
- goto cleanup;
+ return -1;
}
if (qemuCaps &&
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Emulator '%s' does not support machine type '%s'"),
def->emulator, def->os.machine);
- goto cleanup;
+ return -1;
}
if (def->mem.min_guarantee) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Parameter 'min_guarantee' not supported by QEMU."));
- goto cleanup;
+ return -1;
}
/* On x86, UEFI requires ACPI */
def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("UEFI requires ACPI on this architecture"));
- goto cleanup;
+ return -1;
}
/* On aarch64, ACPI requires UEFI */
!virDomainDefHasOldStyleUEFI(def))) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("ACPI requires UEFI on this architecture"));
- goto cleanup;
+ return -1;
}
if (def->os.loader &&
if (!qemuDomainIsQ35(def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Secure boot is supported with q35 machine types only"));
- goto cleanup;
+ return -1;
}
/* Now, technically it is possible to have secure boot on
if (def->os.arch != VIR_ARCH_X86_64) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Secure boot is supported for x86_64 architecture only"));
- goto cleanup;
+ return -1;
}
/* SMM will be enabled by qemuFirmwareFillDomain() if needed. */
def->features[VIR_DOMAIN_FEATURE_SMM] != VIR_TRISTATE_SWITCH_ON) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Secure boot requires SMM feature enabled"));
- goto cleanup;
+ return -1;
}
}
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("this QEMU does not support the 'genid' capability"));
- goto cleanup;
+ return -1;
}
/* Serial graphics adapter */
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SGA)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("qemu does not support SGA"));
- goto cleanup;
+ return -1;
}
if (!def->nserials) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("need at least one serial port to use SGA"));
- goto cleanup;
+ return -1;
}
}
if (qemuDomainDefValidateClockTimers(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (qemuDomainDefValidatePM(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (qemuDomainDefValidateBoot(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
/* QEMU 2.7 (detected via the availability of query-hotpluggable-cpus)
* enforces stricter rules than previous versions when it comes to guest
if (topologycpus != virDomainDefGetVcpusMax(def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("CPU topology doesn't match maximum vcpu count"));
- goto cleanup;
+ return -1;
}
numacpus = virDomainNumaGetCPUCountTotal(def->numa);
_("vCPUs count must be a multiple of the vCPU "
"hotplug granularity (%u)"),
granularity);
- goto cleanup;
+ return -1;
}
}
if (qemuDomainValidateCpuCount(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (ARCH_IS_X86(def->os.arch) &&
virDomainDefGetVcpusMax(def) > QEMU_MAX_VCPUS_WITHOUT_EIM) {
_("more than %d vCPUs are only supported on "
"q35-based machine types"),
QEMU_MAX_VCPUS_WITHOUT_EIM);
- goto cleanup;
+ return -1;
}
if (!def->iommu || def->iommu->eim != VIR_TRISTATE_SWITCH_ON) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("more than %d vCPUs require extended interrupt "
"mode enabled on the iommu device"),
QEMU_MAX_VCPUS_WITHOUT_EIM);
- goto cleanup;
+ return -1;
}
}
def->virtType != VIR_DOMAIN_VIRT_KVM) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("cachetune is only supported for KVM domains"));
- goto cleanup;
+ return -1;
}
if (qemuDomainDefValidateFeatures(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (qemuDomainDefValidateMemory(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (qemuDomainDefValidateNuma(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (qemuDomainDefValidateConsole(def, qemuCaps) < 0)
- goto cleanup;
+ return -1;
if (cfg->vncTLS && cfg->vncTLSx509secretUUID &&
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_TLS_CREDS_X509)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("encrypted VNC TLS keys are not supported with "
"this QEMU binary"));
- goto cleanup;
+ return -1;
}
}
}
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
bool restoreEncSecret = false;
g_autofree char *authalias = NULL;
g_autofree char *encalias = NULL;
- int ret = -1;
if (!(parseFlags & VIR_DOMAIN_DEF_PARSE_STATUS) ||
!qemuCaps ||
if (restoreAuthSecret) {
if (!(authalias = qemuDomainGetSecretAESAlias(disk->info.alias, false)))
- goto cleanup;
+ return -1;
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
- goto cleanup;
+ return -1;
}
if (restoreEncSecret) {
if (!(encalias = qemuDomainGetSecretAESAlias(disk->info.alias, true)))
- goto cleanup;
+ return -1;
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
- goto cleanup;
+ return -1;
}
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
qemuDomainLogContextPtr ctxt = NULL;
if (qemuDomainInitialize() < 0)
- goto cleanup;
+ return NULL;
if (!(ctxt = virObjectNew(qemuDomainLogContextClass)))
- goto cleanup;
+ return NULL;
VIR_DEBUG("Context new %p stdioLogD=%d", ctxt, cfg->stdioLogD);
ctxt->writefd = -1;
}
}
- cleanup:
return ctxt;
error:
virObjectUnref(ctxt);
- ctxt = NULL;
- goto cleanup;
+ return NULL;
}
const char *snapshotDir)
{
g_autofree char *newxml = NULL;
- int ret = -1;
g_autofree char *snapDir = NULL;
g_autofree char *snapFile = NULL;
char uuidstr[VIR_UUID_STRING_BUFLEN];
if (virFileMakePath(snapDir) < 0) {
virReportSystemError(errno, _("cannot create snapshot directory '%s'"),
snapDir);
- goto cleanup;
+ return -1;
}
snapFile = g_strdup_printf("%s/%s.xml", snapDir, def->parent.name);
- ret = virXMLSaveFile(snapFile, NULL, "snapshot-edit", newxml);
-
- cleanup:
- return ret;
+ return virXMLSaveFile(snapFile, NULL, "snapshot-edit", newxml);
}
bool metadata_only)
{
g_autofree char *snapFile = NULL;
- int ret = -1;
qemuDomainObjPrivatePtr priv;
virDomainMomentObjPtr parentsnap = NULL;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
/* Ignore any skipped disks */
if (qemuDomainSnapshotForEachQcow2(driver, vm, snap, "-d",
true) < 0)
- goto cleanup;
+ return -1;
} else {
priv = vm->privateData;
qemuDomainObjEnterMonitor(driver, vm);
virDomainMomentDropParent(snap);
virDomainSnapshotObjListRemove(vm->snapshots, snap);
- ret = 0;
-
- cleanup:
- return ret;
+ return 0;
}
/* Hash iterator callback to discard multiple snapshots. */
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
uid_t uid;
gid_t gid;
- int ret = -1;
qemuDomainGetImageIds(cfg, vm, src, parent, &uid, &gid);
if (virStorageFileInitAs(src, uid, gid) < 0)
- goto cleanup;
-
- ret = 0;
+ return -1;
- cleanup:
- return ret;
+ return 0;
}
{
g_autofree char *mount_options = NULL;
g_autofree char *opts = NULL;
- int ret = -1;
VIR_DEBUG("Setting up /dev/ for domain %s", vm->def->name);
opts = g_strdup_printf("mode=755,size=65536%s", mount_options);
if (virFileSetupDev(data->path, opts) < 0)
- goto cleanup;
+ return -1;
if (qemuDomainPopulateDevices(cfg, vm, data) < 0)
- goto cleanup;
+ return -1;
- ret = 0;
- cleanup:
- return ret;
+ return 0;
}
{
virStorageSourcePtr next;
bool hasNVMe = false;
- int ret = -1;
for (next = disk->src; virStorageSourceIsBacking(next); next = next->backingStore) {
if (next->type == VIR_STORAGE_TYPE_NVME) {
hasNVMe = true;
if (!(nvmePath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
- goto cleanup;
+ return -1;
if (qemuDomainCreateDevice(nvmePath, data, false) < 0)
- goto cleanup;
+ return -1;
} else {
if (!next->path || !virStorageSourceIsLocalStorage(next)) {
/* Not creating device. Just continue. */
}
if (qemuDomainCreateDevice(next->path, data, false) < 0)
- goto cleanup;
+ return -1;
}
}
/* qemu-pr-helper might require access to /dev/mapper/control. */
if (disk->src->pr &&
qemuDomainCreateDevice(QEMU_DEVICE_MAPPER_CONTROL_PATH, data, true) < 0)
- goto cleanup;
+ return -1;
if (hasNVMe &&
qemuDomainCreateDevice(QEMU_DEV_VFIO, data, false) < 0)
- goto cleanup;
+ return -1;
- ret = 0;
- cleanup:
- return ret;
+ return 0;
}
virDomainObjPtr vm)
{
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
- int ret = -1;
if (virBitmapIsBitSet(cfg->namespaces, QEMU_DOMAIN_NS_MOUNT) &&
qemuDomainEnableNamespace(vm, QEMU_DOMAIN_NS_MOUNT) < 0)
- goto cleanup;
+ return -1;
- ret = 0;
- cleanup:
- return ret;
+ return 0;
}
if (!disk) {
virReportError(VIR_ERR_INVALID_ARG,
_("failed to find disk '%s'"), target);
- goto cleanup;
+ return NULL;
}
if (idx == 0)
else
src = virStorageFileChainLookup(disk->src, NULL, NULL, idx, NULL);
- cleanup:
return src;
}