diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 92e96d2a968aa4e66adea8c229a1f07cab00583b..3bcabc31fda6fbbac485a4496194a09db86d8a50 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5197,7 +5197,7 @@ qemuBuildSclpDevStr(virDomainChrDefPtr dev) static int qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager, virCommandPtr cmd, - virDomainDefPtr def, + const virDomainDef *def, virDomainRNGDefPtr rng, virQEMUCapsPtr qemuCaps, char **chr) @@ -5304,7 +5304,7 @@ qemuBuildRNGBackendStr(virDomainRNGDefPtr rng, char * -qemuBuildRNGDevStr(virDomainDefPtr def, +qemuBuildRNGDevStr(const virDomainDef *def, virDomainRNGDefPtr dev, virQEMUCapsPtr qemuCaps) { @@ -5356,6 +5356,52 @@ qemuBuildRNGDevStr(virDomainDefPtr def, } +static int +qemuBuildRNGCommandLine(virLogManagerPtr logManager, + virCommandPtr cmd, + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) +{ + size_t i; + + for (i = 0; i < def->nrngs; i++) { + virDomainRNGDefPtr rng = def->rngs[i]; + char *tmp; + + if (!rng->info.alias) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("RNG device is missing alias")); + return -1; + } + + /* possibly add character device for backend */ + if (qemuBuildRNGBackendChrdevStr(logManager, cmd, def, + rng, qemuCaps, &tmp) < 0) + return -1; + + if (tmp) { + virCommandAddArgList(cmd, "-chardev", tmp, NULL); + VIR_FREE(tmp); + } + + /* add the RNG source backend */ + if (!(tmp = qemuBuildRNGBackendStr(rng, qemuCaps))) + return -1; + + virCommandAddArgList(cmd, "-object", tmp, NULL); + VIR_FREE(tmp); + + /* add the device */ + if (!(tmp = qemuBuildRNGDevStr(def, rng, qemuCaps))) + return -1; + virCommandAddArgList(cmd, "-device", tmp, NULL); + VIR_FREE(tmp); + } + + return 0; +} + + static char *qemuBuildSmbiosBiosStr(virSysinfoBIOSDefPtr def) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -9185,39 +9231,8 @@ qemuBuildCommandLine(virConnectPtr conn, if (qemuBuildMemballoonCommandLine(cmd, def, qemuCaps) < 0) goto error; - for (i = 0; i < def->nrngs; i++) { - virDomainRNGDefPtr rng = def->rngs[i]; - char *tmp; - - if (!rng->info.alias) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("RNG device is missing alias")); - goto error; - } - - /* possibly add character device for backend */ - if (qemuBuildRNGBackendChrdevStr(logManager, cmd, def, - rng, qemuCaps, &tmp) < 0) - goto error; - - if (tmp) { - virCommandAddArgList(cmd, "-chardev", tmp, NULL); - VIR_FREE(tmp); - } - - /* add the RNG source backend */ - if (!(tmp = qemuBuildRNGBackendStr(rng, qemuCaps))) - goto error; - - virCommandAddArgList(cmd, "-object", tmp, NULL); - VIR_FREE(tmp); - - /* add the device */ - if (!(tmp = qemuBuildRNGDevStr(def, rng, qemuCaps))) - goto error; - virCommandAddArgList(cmd, "-device", tmp, NULL); - VIR_FREE(tmp); - } + if (qemuBuildRNGCommandLine(logManager, cmd, def, qemuCaps) < 0) + goto error; if (def->nvram) { if (ARCH_IS_PPC64(def->os.arch) && diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 25de1abde8e7c55d92517f341adea57ba937b5d3..7c13d459f8c5ceab9902bf2b40c6d064699b99e1 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -155,7 +155,7 @@ char *qemuBuildPCIHostdevDevStr(const virDomainDef *def, const char *configfd, virQEMUCapsPtr qemuCaps); -char *qemuBuildRNGDevStr(virDomainDefPtr def, +char *qemuBuildRNGDevStr(const virDomainDef *def, virDomainRNGDefPtr dev, virQEMUCapsPtr qemuCaps); int qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,