qemu: refactor qemuBuildRNGDeviceArgs to allow reuse in RNG hotplug

Rename qemuBuildRNGDeviceArgs to qemuBuildRNGDevStr and change the
return type so that it can be reused in the device hotplug code later.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Luyao Huang 2015-01-17 13:09:31 +08:00 committed by Peter Krempa
parent 3921d13581
commit 58a4eee81a
2 changed files with 19 additions and 15 deletions

View File

@ -6217,21 +6217,19 @@ qemuBuildRNGBackendArgs(virCommandPtr cmd,
} }
static int char *
qemuBuildRNGDeviceArgs(virCommandPtr cmd, qemuBuildRNGDevStr(virDomainDefPtr def,
virDomainDefPtr def,
virDomainRNGDefPtr dev, virDomainRNGDefPtr dev,
virQEMUCapsPtr qemuCaps) virQEMUCapsPtr qemuCaps)
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
int ret = -1;
if (dev->model != VIR_DOMAIN_RNG_MODEL_VIRTIO || if (dev->model != VIR_DOMAIN_RNG_MODEL_VIRTIO ||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG)) { !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("this qemu doesn't support RNG device type '%s'"), _("this qemu doesn't support RNG device type '%s'"),
virDomainRNGModelTypeToString(dev->model)); virDomainRNGModelTypeToString(dev->model));
goto cleanup; goto error;
} }
if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)
@ -6252,16 +6250,15 @@ qemuBuildRNGDeviceArgs(virCommandPtr cmd,
} }
if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0)
goto cleanup; goto error;
if (virBufferCheckError(&buf) < 0)
goto error;
virCommandAddArg(cmd, "-device"); return virBufferContentAndReset(&buf);
virCommandAddArgBuffer(cmd, &buf);
ret = 0; error:
cleanup:
virBufferFreeAndReset(&buf); virBufferFreeAndReset(&buf);
return ret; return NULL;
} }
@ -10160,13 +10157,16 @@ qemuBuildCommandLine(virConnectPtr conn,
} }
for (i = 0; i < def->nrngs; i++) { for (i = 0; i < def->nrngs; i++) {
char *devstr;
/* add the RNG source backend */ /* add the RNG source backend */
if (qemuBuildRNGBackendArgs(cmd, def->rngs[i], qemuCaps) < 0) if (qemuBuildRNGBackendArgs(cmd, def->rngs[i], qemuCaps) < 0)
goto error; goto error;
/* add the device */ /* add the device */
if (qemuBuildRNGDeviceArgs(cmd, def, def->rngs[i], qemuCaps) < 0) if (!(devstr = qemuBuildRNGDevStr(def, def->rngs[i], qemuCaps)))
goto error; goto error;
virCommandAddArgList(cmd, "-device", devstr, NULL);
VIR_FREE(devstr);
} }
if (def->nvram) { if (def->nvram) {

View File

@ -171,6 +171,10 @@ char *qemuBuildPCIHostdevDevStr(virDomainDefPtr def,
const char *configfd, const char *configfd,
virQEMUCapsPtr qemuCaps); virQEMUCapsPtr qemuCaps);
char *qemuBuildRNGDevStr(virDomainDefPtr def,
virDomainRNGDefPtr dev,
virQEMUCapsPtr qemuCaps);
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev); int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);
/* Legacy, pre device support */ /* Legacy, pre device support */