Signed-off-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
---
src/qemu/qemu_command.c | 18 -----------------
src/qemu/qemu_validate.c | 43 +++++++++++++++++++++++++++++++++++++++-
tests/qemuxml2argvtest.c | 2 +-
tests/qemuxml2xmltest.c | 2 +-
4 files changed, 44 insertions(+), 21 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 225d1d7491..7008f14028 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8410,13 +8410,6 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def,
{
g_auto(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"));
- return NULL;
- }
-
virBufferAddLit(&buf, "ivshmem");
virBufferAsprintf(&buf, ",id=%s", shmem->info.alias);
@@ -8450,17 +8443,6 @@ qemuBuildShmemDevStr(virDomainDefPtr def,
{
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
- if ((shmem->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_PLAIN)) ||
- (shmem->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL))) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("shmem model '%s' is not supported "
- "by this QEMU binary"),
- virDomainShmemModelTypeToString(shmem->model));
- return NULL;
- }
-
virBufferAdd(&buf, virDomainShmemModelTypeToString(shmem->model), -1);
virBufferAsprintf(&buf, ",id=%s", shmem->info.alias);
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 9bb7cddb40..65d6e18fe5 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -4401,6 +4401,44 @@ qemuValidateDomainDeviceDefMemory(virDomainMemoryDefPtr mem,
}
+static int
+qemuValidateDomainDeviceDefShmem(virDomainShmemDefPtr shmem,
+ virQEMUCapsPtr qemuCaps)
+{
+ switch (shmem->model) {
+ case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("ivshmem device is not supported "
+ "with this QEMU binary"));
+ return -1;
+ }
+ break;
+
+ case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_PLAIN)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("shmem model '%s' is not supported "
+ "by this QEMU binary"),
+ virDomainShmemModelTypeToString(shmem->model));
+ return -1;
+ }
+ break;
+
+ case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("shmem model '%s' is not supported "
+ "by this QEMU binary"),
+ virDomainShmemModelTypeToString(shmem->model));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
int
qemuValidateDomainDeviceDef(const virDomainDeviceDef *dev,
const virDomainDef *def,
@@ -4515,8 +4553,11 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef *dev,
ret = qemuValidateDomainDeviceDefMemory(dev->data.memory, qemuCaps);
break;
- case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_SHMEM:
+ ret = qemuValidateDomainDeviceDefShmem(dev->data.shmem, qemuCaps);
+ break;
+
+ case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_NONE:
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 5076d774f8..fdcfadf4c8 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -2945,7 +2945,7 @@ mymain(void)
DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
- DO_TEST_FAILURE("shmem", NONE);
+ DO_TEST_PARSE_ERROR("shmem", NONE);
DO_TEST_FAILURE("shmem-invalid-size",
QEMU_CAPS_DEVICE_IVSHMEM);
DO_TEST_FAILURE("shmem-invalid-address",
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 93287d0a55..a897dfe17a 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -1148,7 +1148,7 @@ mymain(void)
DO_TEST("tap-vhost", NONE);
DO_TEST("tap-vhost-incorrect", NONE);
- DO_TEST("shmem", NONE);
+ DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
DO_TEST("shmem-plain-doorbell",
QEMU_CAPS_DEVICE_IVSHMEM_PLAIN, QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
DO_TEST("smbios", NONE);
--
2.26.2