From 5a9b62b909200f231a70331d1848c983046f4fc7 Mon Sep 17 00:00:00 2001 Message-Id: <5a9b62b909200f231a70331d1848c983046f4fc7@dist-git> From: Martin Kletzander Date: Fri, 4 Nov 2016 10:29:39 +0100 Subject: [PATCH] qemu: Move common checks outside qemuBuildShmemDevLegacyStr Some checks will need to be performed for newer device types as well, so let's not duplicate them. Signed-off-by: Martin Kletzander (cherry picked from commit 9187cecc8170cbb5230d6d9787ad97edc8a07c06) https://bugzilla.redhat.com/show_bug.cgi?id=1392031 Signed-off-by: Martin Kletzander --- src/qemu/qemu_command.c | 54 +++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a3c9c7a..6eafa5e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8467,29 +8467,12 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("ivshmem device is not supported " "with this QEMU binary")); - goto error; + return NULL; } 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); @@ -8505,13 +8488,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; @@ -8558,6 +8534,32 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, { char *devstr = NULL; + 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 (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 (!(devstr = qemuBuildShmemDevLegacyStr(def, shmem, qemuCaps))) return -1; virCommandAddArgList(cmd, "-device", devstr, NULL); -- 2.10.2