diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 78d3b965c6..58ab1beba6 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -6068,7 +6068,7 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps, } -static void +void virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps, virDomainCapsDeviceRNGPtr rng) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 22b3da3e63..0b28c9b635 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -742,6 +742,8 @@ int virQEMUCapsFillDomainCaps(virQEMUCapsPtr qemuCaps, void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps, virDomainCapsDeviceVideoPtr dev); +void virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps, + virDomainCapsDeviceRNGPtr rng); bool virQEMUCapsGuestIsNative(virArch host, virArch guest); diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 6e1db2715d..7e2fe81e08 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1845,6 +1845,8 @@ static int qemuValidateDomainRNGDef(const virDomainRNGDef *def, virQEMUCapsPtr qemuCaps) { + virDomainCapsDeviceRNG rngCaps = { 0 }; + switch ((virDomainRNGBackend) def->backend) { case VIR_DOMAIN_RNG_BACKEND_RANDOM: if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) { @@ -1883,29 +1885,13 @@ qemuValidateDomainRNGDef(const virDomainRNGDef *def, return -1; } - switch ((virDomainRNGModel) def->model) { - case VIR_DOMAIN_RNG_MODEL_VIRTIO: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("domain configuration does not support rng model '%s'"), - virDomainRNGModelTypeToString(def->model)); - return -1; - } - break; + virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, &rngCaps); - case VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL: - case VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL) && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("domain configuration does not support rng model '%s'"), - virDomainRNGModelTypeToString(def->model)); - return -1; - } - break; - - case VIR_DOMAIN_RNG_MODEL_LAST: - break; + if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(rngCaps.model, def->model)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("domain configuration does not support rng model '%s'"), + virDomainRNGModelTypeToString(def->model)); + return -1; } if (qemuValidateDomainVirtioOptions(def->virtio, qemuCaps) < 0)