Some checks will need to be performed for newer device types as well, so
let's not duplicate them.
Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
---
src/qemu/qemu_command.c | 66 +++++++++++++++++++++++++------------------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 7aaadade6fbc..28c19b58f840 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8412,33 +8412,9 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def,
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("ivshmem device is not supported "
- "with this QEMU binary"));
- goto error;
- }
-
virBufferAddLit(&buf, "ivshmem");
- if (shmem->size) {
- /*
- * Thanks to our parsing code, we have a guarantee that the
- * size is power of two and is at least a mebibyte in size.
- * But because it may change in the future, the checks are
- * doubled in here.
- */
- if (shmem->size & (shmem->size - 1)) {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("shmem size must be a power of two"));
- goto error;
- }
- if (shmem->size < 1024 * 1024) {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("shmem size must be at least 1 MiB (1024 KiB)"));
- goto error;
- }
+ if (shmem->size)
virBufferAsprintf(&buf, ",size=%llum", shmem->size >>
20);
- }
if (!shmem->server.enabled) {
virBufferAsprintf(&buf, ",shm=%s,id=%s", shmem->name,
shmem->info.alias);
@@ -8454,13 +8430,6 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def,
}
}
- if (shmem->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("only 'pci' addresses are supported for the "
- "shared memory device"));
- goto error;
- }
-
if (qemuBuildDeviceAddressStr(&buf, def, &shmem->info, qemuCaps) < 0)
goto error;
@@ -8507,6 +8476,39 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
{
char *devstr = NULL;
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("ivshmem device is not supported "
+ "with this QEMU binary"));
+ return -1;
+ }
+
+ if (shmem->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("only 'pci' addresses are supported for the "
+ "shared memory device"));
+ return -1;
+ }
+
+ if (shmem->size) {
+ /*
+ * Thanks to our parsing code, we have a guarantee that the
+ * size is power of two and is at least a mebibyte in size.
+ * But because it may change in the future, the checks are
+ * doubled in here.
+ */
+ if (shmem->size & (shmem->size - 1)) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("shmem size must be a power of two"));
+ return -1;
+ }
+ if (shmem->size < 1024 * 1024) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("shmem size must be at least 1 MiB (1024 KiB)"));
+ return -1;
+ }
+ }
+
if (!(devstr = qemuBuildShmemDevLegacyStr(def, shmem, qemuCaps)))
return -1;
virCommandAddArgList(cmd, "-device", devstr, NULL);
--
2.9.2