qemu_validate: Deduplicate code for RNG model check

In my recent commit of 5216304bfe I've moved RNG model check
from domain capabilities validator into qemu validator. During
that I had to basically duplicate RNG model to qemuCaps checks.
Problem with this approach is that after my commit qemu validator
and domCaps are disconnected and thus domCaps might report (in
general) different set of supported RNG models.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
Michal Privoznik 2020-11-17 10:37:10 +01:00
parent d009f5b400
commit 5ea08a33bf
3 changed files with 11 additions and 23 deletions

View File

@ -6068,7 +6068,7 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
}
static void
void
virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsDeviceRNGPtr rng)
{

View File

@ -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);

View File

@ -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)