[PATCH 0/5] Deduplicate some of validation code

These stemmed from Cole's comment on my patches: https://www.redhat.com/archives/libvir-list/2020-November/msg00888.html The approach might not be that obvious at first because domCaps do qemuCaps to device model translation and during validation we want the exact opposite - we have parsed device model and want to check whether qemuCaps has corresponding capability. But what we can do, is let domCaps code fill a bitmap of supported device models and then check if the bit that corresponds to parsed device model is set. In this series I'm fixing RNG and video models, which were checked this way until very recently (until I touched the code). And also I'm introducing graphics check (which is new) because that one looked the most sane from virQEMUCapsFillDomainCaps(). The rest there not that much. Michal Prívozník (5): domain_capabilities: Introduce VIR_DOMAIN_CAPS_ENUM_IS_SET qemu_validate: Deduplicate code for video model check qemu_validate: Deduplicate code for RNG model check domcaps: Report egl-headless graphics type qemu_validate: Deduplicate code for graphics type check src/conf/domain_capabilities.c | 2 +- src/conf/domain_capabilities.h | 2 + src/qemu/qemu_capabilities.c | 8 +- src/qemu/qemu_capabilities.h | 9 ++ src/qemu/qemu_validate.c | 107 ++++-------------- .../domaincapsdata/qemu_2.10.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_2.10.0-tcg.x86_64.xml | 1 + .../qemu_2.10.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.10.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.10.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_2.10.0.s390x.xml | 1 + tests/domaincapsdata/qemu_2.10.0.x86_64.xml | 1 + .../domaincapsdata/qemu_2.11.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_2.11.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.11.0.s390x.xml | 1 + tests/domaincapsdata/qemu_2.11.0.x86_64.xml | 1 + .../domaincapsdata/qemu_2.12.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_2.12.0-tcg.x86_64.xml | 1 + .../qemu_2.12.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.12.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.12.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_2.12.0.s390x.xml | 1 + tests/domaincapsdata/qemu_2.12.0.x86_64.xml | 1 + .../domaincapsdata/qemu_3.0.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_3.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_3.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_3.0.0.x86_64.xml | 1 + .../domaincapsdata/qemu_3.1.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_3.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.1.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_3.1.0.x86_64.xml | 1 + .../domaincapsdata/qemu_4.0.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.0.0-tcg.x86_64.xml | 1 + .../qemu_4.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.0.0.x86_64.xml | 1 + .../domaincapsdata/qemu_4.1.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.1.0.x86_64.xml | 1 + .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 + .../qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 + .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 1 + .../qemu_5.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 1 + .../domaincapsdata/qemu_5.1.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_5.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.1.0.x86_64.xml | 1 + .../domaincapsdata/qemu_5.2.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_5.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.2.0.x86_64.xml | 1 + 61 files changed, 97 insertions(+), 87 deletions(-) -- 2.26.2

This is a convenient macro for querying whether particular domain caps enum value is set or not. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/conf/domain_capabilities.c | 2 +- src/conf/domain_capabilities.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 8a690a57a3..8130311590 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -287,7 +287,7 @@ virDomainCapsEnumFormat(virBufferPtr buf, for (i = 0; i < sizeof(capsEnum->values) * CHAR_BIT; i++) { const char *val; - if (!(capsEnum->values & (1 << i))) + if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(*capsEnum, i)) continue; if ((val = (valToStr)(i))) diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 4ae6f0fbb1..f177af1744 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -214,6 +214,8 @@ virDomainCapsCPUModelPtr virDomainCapsCPUModelsGet(virDomainCapsCPUModelsPtr cpuModels, const char *name); +#define VIR_DOMAIN_CAPS_ENUM_IS_SET(capsEnum, value) \ + ((capsEnum).values & (1 << value)) #define VIR_DOMAIN_CAPS_ENUM_SET(capsEnum, ...) \ do { \ -- 2.26.2

In my recent commit of a33279daa8 I've moved video model check from domain capabilities validator into qemu validator. During that I had to basically duplicate video 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 video models. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 4 ++++ src/qemu/qemu_validate.c | 37 +++--------------------------------- 3 files changed, 8 insertions(+), 35 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9f9f976754..78d3b965c6 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5991,7 +5991,7 @@ virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps, } -static void +void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps, virDomainCapsDeviceVideoPtr dev) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 9d3f73b2ab..22b3da3e63 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -739,6 +739,10 @@ int virQEMUCapsFillDomainCaps(virQEMUCapsPtr qemuCaps, virFirmwarePtr *firmwares, size_t nfirmwares); +void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps, + virDomainCapsDeviceVideoPtr dev); + + bool virQEMUCapsGuestIsNative(virArch host, virArch guest); diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 09cdcb20c2..6e1db2715d 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2203,46 +2203,15 @@ static int qemuValidateDomainDeviceDefVideo(const virDomainVideoDef *video, virQEMUCapsPtr qemuCaps) { - virQEMUCapsFlags cap = QEMU_CAPS_LAST; + virDomainCapsDeviceVideo videoCaps = { 0 }; /* there's no properties to validate for NONE video devices */ if (video->type == VIR_DOMAIN_VIDEO_TYPE_NONE) return 0; - switch ((virDomainVideoType) video->type) { - case VIR_DOMAIN_VIDEO_TYPE_VGA: - cap = QEMU_CAPS_DEVICE_VGA; - break; - case VIR_DOMAIN_VIDEO_TYPE_CIRRUS: - cap = QEMU_CAPS_DEVICE_CIRRUS_VGA; - break; - case VIR_DOMAIN_VIDEO_TYPE_VMVGA: - cap = QEMU_CAPS_DEVICE_VMWARE_SVGA; - break; - case VIR_DOMAIN_VIDEO_TYPE_QXL: - cap = QEMU_CAPS_DEVICE_QXL; - break; - case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: - cap = QEMU_CAPS_DEVICE_VIRTIO_GPU; - break; - case VIR_DOMAIN_VIDEO_TYPE_BOCHS: - cap = QEMU_CAPS_DEVICE_BOCHS_DISPLAY; - break; - case VIR_DOMAIN_VIDEO_TYPE_RAMFB: - cap = QEMU_CAPS_DEVICE_RAMFB; - break; - case VIR_DOMAIN_VIDEO_TYPE_DEFAULT: - case VIR_DOMAIN_VIDEO_TYPE_XEN: - case VIR_DOMAIN_VIDEO_TYPE_VBOX: - case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: - case VIR_DOMAIN_VIDEO_TYPE_GOP: - case VIR_DOMAIN_VIDEO_TYPE_NONE: - case VIR_DOMAIN_VIDEO_TYPE_LAST: - /* nada */ - break; - } + virQEMUCapsFillDomainDeviceVideoCaps(qemuCaps, &videoCaps); - if (!virQEMUCapsGet(qemuCaps, cap)) { + if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(videoCaps.modelType, video->type)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("domain configuration does not support video model '%s'"), virDomainVideoTypeToString(video->type)); -- 2.26.2

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> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 2 ++ src/qemu/qemu_validate.c | 30 ++++++++---------------------- 3 files changed, 11 insertions(+), 23 deletions(-) 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) -- 2.26.2

QEMU supports egl-headless if QEMU_CAPS_EGL_HEADLESS capability is present. There are some additional requirements but those are checked for in qemuValidateDomainDeviceDefGraphics() and depend on domain configuration and thus are not representable in domain capabilities. Let's stick with plain qemuCaps check then. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.10.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.10.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.10.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_2.10.0.s390x.xml | 1 + tests/domaincapsdata/qemu_2.10.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.11.0.s390x.xml | 1 + tests/domaincapsdata/qemu_2.11.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.12.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_2.12.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_2.12.0.s390x.xml | 1 + tests/domaincapsdata/qemu_2.12.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_3.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_3.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_3.1.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_3.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_5.2.0.x86_64.xml | 1 + 57 files changed, 58 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 58ab1beba6..7745c968de 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5988,6 +5988,8 @@ virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps, VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_VNC); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS)) + VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS); } diff --git a/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml index be2840d9b8..be99698f09 100644 --- a/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml @@ -109,6 +109,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml index 1193f49bd6..31c096077d 100644 --- a/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml @@ -124,6 +124,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.10.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_2.10.0-virt.aarch64.xml index 4505d64e3a..bb509975ba 100644 --- a/tests/domaincapsdata/qemu_2.10.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_2.10.0-virt.aarch64.xml @@ -92,6 +92,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.10.0.aarch64.xml b/tests/domaincapsdata/qemu_2.10.0.aarch64.xml index 629833b745..f1f34d5024 100644 --- a/tests/domaincapsdata/qemu_2.10.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_2.10.0.aarch64.xml @@ -90,6 +90,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.10.0.ppc64.xml b/tests/domaincapsdata/qemu_2.10.0.ppc64.xml index 863afbc0df..2741a73237 100644 --- a/tests/domaincapsdata/qemu_2.10.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_2.10.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.10.0.s390x.xml b/tests/domaincapsdata/qemu_2.10.0.s390x.xml index ce5c92edce..2e81779ad3 100644 --- a/tests/domaincapsdata/qemu_2.10.0.s390x.xml +++ b/tests/domaincapsdata/qemu_2.10.0.s390x.xml @@ -153,6 +153,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.10.0.x86_64.xml b/tests/domaincapsdata/qemu_2.10.0.x86_64.xml index 6596016d33..81bef600a9 100644 --- a/tests/domaincapsdata/qemu_2.10.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.10.0.x86_64.xml @@ -109,6 +109,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml index c2e148e0fc..d11e499bef 100644 --- a/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml @@ -107,6 +107,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml index 7f66cf7b7e..00056c7141 100644 --- a/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml @@ -119,6 +119,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.11.0.s390x.xml b/tests/domaincapsdata/qemu_2.11.0.s390x.xml index c5b48fdad5..684382d4c9 100644 --- a/tests/domaincapsdata/qemu_2.11.0.s390x.xml +++ b/tests/domaincapsdata/qemu_2.11.0.s390x.xml @@ -152,6 +152,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.11.0.x86_64.xml b/tests/domaincapsdata/qemu_2.11.0.x86_64.xml index 38b6b20f77..71ecbacacc 100644 --- a/tests/domaincapsdata/qemu_2.11.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.11.0.x86_64.xml @@ -107,6 +107,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml index 8d38d33369..dbd1bd4b15 100644 --- a/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml @@ -121,6 +121,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml index 9a89587115..4c867b18d0 100644 --- a/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml @@ -130,6 +130,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml index 8ea58bfa25..58ebbe9cb8 100644 --- a/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml @@ -94,6 +94,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0.aarch64.xml b/tests/domaincapsdata/qemu_2.12.0.aarch64.xml index 667516e75e..5c96cc8d1e 100644 --- a/tests/domaincapsdata/qemu_2.12.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_2.12.0.aarch64.xml @@ -92,6 +92,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0.ppc64.xml b/tests/domaincapsdata/qemu_2.12.0.ppc64.xml index eac3e6a868..1b12b9928f 100644 --- a/tests/domaincapsdata/qemu_2.12.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_2.12.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0.s390x.xml b/tests/domaincapsdata/qemu_2.12.0.s390x.xml index 01cc3d81ec..4df87a9a2f 100644 --- a/tests/domaincapsdata/qemu_2.12.0.s390x.xml +++ b/tests/domaincapsdata/qemu_2.12.0.s390x.xml @@ -151,6 +151,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_2.12.0.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0.x86_64.xml index 6e006a3ba3..81d5083959 100644 --- a/tests/domaincapsdata/qemu_2.12.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_2.12.0.x86_64.xml @@ -121,6 +121,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml index cd37906bc7..5b6e884403 100644 --- a/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml @@ -120,6 +120,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml index d3211e7a13..3a2fd5786a 100644 --- a/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml @@ -131,6 +131,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.0.0.ppc64.xml b/tests/domaincapsdata/qemu_3.0.0.ppc64.xml index 1b8ddd4ed0..6250af9e67 100644 --- a/tests/domaincapsdata/qemu_3.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_3.0.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.0.0.s390x.xml b/tests/domaincapsdata/qemu_3.0.0.s390x.xml index 7a4e536fb5..dfec6c5c19 100644 --- a/tests/domaincapsdata/qemu_3.0.0.s390x.xml +++ b/tests/domaincapsdata/qemu_3.0.0.s390x.xml @@ -157,6 +157,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.0.0.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0.x86_64.xml index 9fa4224760..56830014ea 100644 --- a/tests/domaincapsdata/qemu_3.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_3.0.0.x86_64.xml @@ -120,6 +120,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml index 82b1b6a095..a75c577539 100644 --- a/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml @@ -123,6 +123,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml index 756b28034e..e9e0cb9329 100644 --- a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml @@ -134,6 +134,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.1.0.ppc64.xml b/tests/domaincapsdata/qemu_3.1.0.ppc64.xml index 6a2bc87947..46226466d5 100644 --- a/tests/domaincapsdata/qemu_3.1.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_3.1.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_3.1.0.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0.x86_64.xml index ffc82f17c3..984be10833 100644 --- a/tests/domaincapsdata/qemu_3.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_3.1.0.x86_64.xml @@ -123,6 +123,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml index c837de966f..566b8ab281 100644 --- a/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml @@ -123,6 +123,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml index 0aa8aa18be..643cc4a631 100644 --- a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml @@ -135,6 +135,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml index f5347aba9f..b77a7e67bc 100644 --- a/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml @@ -97,6 +97,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0.aarch64.xml b/tests/domaincapsdata/qemu_4.0.0.aarch64.xml index b879d7553c..72ed2c90c5 100644 --- a/tests/domaincapsdata/qemu_4.0.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.0.0.aarch64.xml @@ -95,6 +95,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0.ppc64.xml b/tests/domaincapsdata/qemu_4.0.0.ppc64.xml index 0642753f11..4b1ec16992 100644 --- a/tests/domaincapsdata/qemu_4.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_4.0.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0.s390x.xml b/tests/domaincapsdata/qemu_4.0.0.s390x.xml index 632c26d689..3ac97b0625 100644 --- a/tests/domaincapsdata/qemu_4.0.0.s390x.xml +++ b/tests/domaincapsdata/qemu_4.0.0.s390x.xml @@ -163,6 +163,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.0.0.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0.x86_64.xml index 3f64bd4b66..99d4a00a6a 100644 --- a/tests/domaincapsdata/qemu_4.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.0.0.x86_64.xml @@ -123,6 +123,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml index 8bf41d6b49..3a7e01c809 100644 --- a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml @@ -128,6 +128,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml index d6265ce243..bb1dacc14c 100644 --- a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml @@ -136,6 +136,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.1.0.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0.x86_64.xml index 5010f879a6..577b7f439d 100644 --- a/tests/domaincapsdata/qemu_4.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.1.0.x86_64.xml @@ -128,6 +128,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml index 6f72b67f68..1a65f6e727 100644 --- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml @@ -134,6 +134,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml index 7339a3f81c..622acc47a1 100644 --- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml @@ -141,6 +141,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml index ef57216562..2d362f1582 100644 --- a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml @@ -97,6 +97,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml index 3cf2a6faf1..04bfba5196 100644 --- a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml @@ -95,6 +95,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml index 0f2cf6da64..304b06b14e 100644 --- a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0.s390x.xml b/tests/domaincapsdata/qemu_4.2.0.s390x.xml index ecd037438a..7931dd4130 100644 --- a/tests/domaincapsdata/qemu_4.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_4.2.0.s390x.xml @@ -176,6 +176,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml index f4a8321637..da9cf56ba5 100644 --- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml @@ -134,6 +134,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml index d70c718b94..a42bec4d87 100644 --- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml @@ -136,6 +136,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml index 58f8547d3d..40d691a62d 100644 --- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml @@ -142,6 +142,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml index b2b37c0f7b..5fdc8d45d2 100644 --- a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml @@ -98,6 +98,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml index 7377a2c4cf..4a897d5e1e 100644 --- a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml @@ -96,6 +96,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.0.0.ppc64.xml b/tests/domaincapsdata/qemu_5.0.0.ppc64.xml index 9693aeb72e..bedfae90e0 100644 --- a/tests/domaincapsdata/qemu_5.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_5.0.0.ppc64.xml @@ -62,6 +62,7 @@ <enum name='type'> <value>sdl</value> <value>vnc</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml index 587b49f55c..57638696f8 100644 --- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml @@ -136,6 +136,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml index ed2da1f5da..9fba7f33ab 100644 --- a/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml @@ -137,6 +137,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml index 669afdbec8..21db6a084a 100644 --- a/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml @@ -142,6 +142,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.1.0.x86_64.xml b/tests/domaincapsdata/qemu_5.1.0.x86_64.xml index 4379ec351d..1984ed2e07 100644 --- a/tests/domaincapsdata/qemu_5.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.1.0.x86_64.xml @@ -137,6 +137,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml index 7fa021fcba..5a3777f6f8 100644 --- a/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml @@ -137,6 +137,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml index b5c9b31da7..ad10e7b8fd 100644 --- a/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml @@ -142,6 +142,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> diff --git a/tests/domaincapsdata/qemu_5.2.0.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0.x86_64.xml index 953c18a251..ab6455c3fc 100644 --- a/tests/domaincapsdata/qemu_5.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.2.0.x86_64.xml @@ -137,6 +137,7 @@ <value>sdl</value> <value>vnc</value> <value>spice</value> + <value>egl-headless</value> </enum> </graphics> <video supported='yes'> -- 2.26.2

Similarly to previous commits, we can utilize domCaps to check if graphics type is supported. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_validate.c | 40 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 7745c968de..0efe5462b5 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5976,7 +5976,7 @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps, } -static void +void virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps, virDomainCapsDeviceGraphicsPtr dev) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 0b28c9b635..1194f90140 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -739,6 +739,9 @@ int virQEMUCapsFillDomainCaps(virQEMUCapsPtr qemuCaps, virFirmwarePtr *firmwares, size_t nfirmwares); +void virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps, + virDomainCapsDeviceGraphicsPtr dev); + void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps, virDomainCapsDeviceVideoPtr dev); diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 7e2fe81e08..6ddef3de35 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3752,12 +3752,6 @@ qemuValidateDomainDeviceDefSPICEGraphics(const virDomainGraphicsDef *graphics, virDomainGraphicsListenDefPtr glisten = NULL; int tlsPort = graphics->data.spice.tlsPort; - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("spice graphics are not supported with this QEMU")); - return -1; - } - glisten = virDomainGraphicsGetListen((virDomainGraphicsDefPtr)graphics, 0); if (!glisten) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -3823,9 +3817,19 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, virQEMUDriverPtr driver, virQEMUCapsPtr qemuCaps) { + virDomainCapsDeviceGraphics graphicsCaps = { 0 }; bool have_egl_headless = false; size_t i; + virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, &graphicsCaps); + + if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(graphicsCaps.type, graphics->type)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("%s graphics are not supported with this QEMU"), + virDomainGraphicsTypeToString(graphics->type)); + return -1; + } + for (i = 0; i < def->ngraphics; i++) { if (def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS) { have_egl_headless = true; @@ -3838,13 +3842,6 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, * supported by QEMU. */ if (have_egl_headless) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("egl-headless display is not supported with this " - "QEMU binary")); - return -1; - } - if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS && graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC && graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { @@ -3878,14 +3875,6 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, } break; - case VIR_DOMAIN_GRAPHICS_TYPE_VNC: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("vnc graphics are not supported with this QEMU")); - return -1; - } - break; - case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: if (qemuValidateDomainDeviceDefSPICEGraphics(graphics, driver, qemuCaps) < 0) @@ -3903,15 +3892,12 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, } break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; + break; } return 0; -- 2.26.2

On Tue, Nov 17, 2020 at 12:28:27 +0100, Michal Privoznik wrote:
Similarly to previous commits, we can utilize domCaps to check if graphics type is supported.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_validate.c | 40 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-)
[...]
@@ -3903,15 +3892,12 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, }
break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; + break;
Removing 'default: ' is not necessary once you use proper type for the variable in the switch statement, which is our usual approach. The default and _LAST case should use virReportEnumRangeError.

On 11/18/20 8:59 AM, Peter Krempa wrote:
On Tue, Nov 17, 2020 at 12:28:27 +0100, Michal Privoznik wrote:
Similarly to previous commits, we can utilize domCaps to check if graphics type is supported.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_validate.c | 40 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-)
[...]
@@ -3903,15 +3892,12 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, }
break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; + break;
Removing 'default: ' is not necessary once you use proper type for the variable in the switch statement, which is our usual approach.
I guess I don't need to typecast ->type since it's already stored as virDomainGraphicsType in the struct.
The default and _LAST case should use virReportEnumRangeError.
I'm not sure it's adding useful code. In this very patch I'm adding a check that rejects unknown values for ->type and thus I don't see a way how the control could hit any of these 'case', or 'default'. Sorry, Michal

On Wed, Nov 18, 2020 at 09:12:26 +0100, Michal Privoznik wrote:
On 11/18/20 8:59 AM, Peter Krempa wrote:
On Tue, Nov 17, 2020 at 12:28:27 +0100, Michal Privoznik wrote:
Similarly to previous commits, we can utilize domCaps to check if graphics type is supported.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_validate.c | 40 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-)
[...]
@@ -3903,15 +3892,12 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, } break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; + break;
Removing 'default: ' is not necessary once you use proper type for the variable in the switch statement, which is our usual approach.
I guess I don't need to typecast ->type since it's already stored as virDomainGraphicsType in the struct.
The default and _LAST case should use virReportEnumRangeError.
I'm not sure it's adding useful code. In this very patch I'm adding a check that rejects unknown values for ->type and thus I don't see a way how the control could hit any of these 'case', or 'default'.
You are right it won't . A drawback of using the capability code is that it relies on converting the type to a bit array stored in "unsigned int" without any overflow safeguards. Once a device model or type enum reaches 33 entries, the code will start failing without any obvious sign. virDomainCapsEnumSet which is internally used by the VIR_DOMAIN_CAPS_ENUM_SET which is used by virQEMUCapsFillDomainDeviceGraphicsCaps to fill the bitmap catches overflow but the callers neglect to propagate it.

On 11/18/20 9:32 AM, Peter Krempa wrote:
On Wed, Nov 18, 2020 at 09:12:26 +0100, Michal Privoznik wrote:
On 11/18/20 8:59 AM, Peter Krempa wrote:
On Tue, Nov 17, 2020 at 12:28:27 +0100, Michal Privoznik wrote:
Similarly to previous commits, we can utilize domCaps to check if graphics type is supported.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_validate.c | 40 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-)
[...]
@@ -3903,15 +3892,12 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, } break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; + break;
Removing 'default: ' is not necessary once you use proper type for the variable in the switch statement, which is our usual approach.
I guess I don't need to typecast ->type since it's already stored as virDomainGraphicsType in the struct.
The default and _LAST case should use virReportEnumRangeError.
I'm not sure it's adding useful code. In this very patch I'm adding a check that rejects unknown values for ->type and thus I don't see a way how the control could hit any of these 'case', or 'default'.
You are right it won't .
A drawback of using the capability code is that it relies on converting the type to a bit array stored in "unsigned int" without any overflow safeguards. Once a device model or type enum reaches 33 entries, the code will start failing without any obvious sign.
virDomainCapsEnumSet which is internally used by the VIR_DOMAIN_CAPS_ENUM_SET which is used by virQEMUCapsFillDomainDeviceGraphicsCaps to fill the bitmap catches overflow but the callers neglect to propagate it.
Alright, so how about I post a follow up patch that checks for retval of virDomainCapsEnumSet() and merge this patch as is? Would that work for you? Michal

On Wed, Nov 18, 2020 at 09:41:44 +0100, Michal Privoznik wrote:
On 11/18/20 9:32 AM, Peter Krempa wrote:
On Wed, Nov 18, 2020 at 09:12:26 +0100, Michal Privoznik wrote:
On 11/18/20 8:59 AM, Peter Krempa wrote:
On Tue, Nov 17, 2020 at 12:28:27 +0100, Michal Privoznik wrote:
Similarly to previous commits, we can utilize domCaps to check if graphics type is supported.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_validate.c | 40 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-)
[...]
@@ -3903,15 +3892,12 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, } break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; + break;
Removing 'default: ' is not necessary once you use proper type for the variable in the switch statement, which is our usual approach.
I guess I don't need to typecast ->type since it's already stored as virDomainGraphicsType in the struct.
The default and _LAST case should use virReportEnumRangeError.
I'm not sure it's adding useful code. In this very patch I'm adding a check that rejects unknown values for ->type and thus I don't see a way how the control could hit any of these 'case', or 'default'.
You are right it won't .
A drawback of using the capability code is that it relies on converting the type to a bit array stored in "unsigned int" without any overflow safeguards. Once a device model or type enum reaches 33 entries, the code will start failing without any obvious sign.
virDomainCapsEnumSet which is internally used by the VIR_DOMAIN_CAPS_ENUM_SET which is used by virQEMUCapsFillDomainDeviceGraphicsCaps to fill the bitmap catches overflow but the callers neglect to propagate it.
Alright, so how about I post a follow up patch that checks for retval of virDomainCapsEnumSet() and merge this patch as is? Would that work for you?
Yes, merge these as they are. Regarding the fix for the domain caps stuff, I prefer if you add compile time checks that each declaration of virDomainCapsEnum guards that the corresponding enum's _LAST value is less than 32. It's not really a runtime problem, nor anything user can fix in their configuration.

On 11/17/20 6:28 AM, Michal Privoznik wrote:
These stemmed from Cole's comment on my patches:
https://www.redhat.com/archives/libvir-list/2020-November/msg00888.html
The approach might not be that obvious at first because domCaps do qemuCaps to device model translation and during validation we want the exact opposite - we have parsed device model and want to check whether qemuCaps has corresponding capability.
But what we can do, is let domCaps code fill a bitmap of supported device models and then check if the bit that corresponds to parsed device model is set.
In this series I'm fixing RNG and video models, which were checked this way until very recently (until I touched the code). And also I'm introducing graphics check (which is new) because that one looked the most sane from virQEMUCapsFillDomainCaps(). The rest there not that much.
Michal Prívozník (5): domain_capabilities: Introduce VIR_DOMAIN_CAPS_ENUM_IS_SET qemu_validate: Deduplicate code for video model check qemu_validate: Deduplicate code for RNG model check domcaps: Report egl-headless graphics type qemu_validate: Deduplicate code for graphics type check Reviewed-by: Cole Robinson <crobinso@redhat.com>
Thanks for taking care of this - Cole
participants (3)
-
Cole Robinson
-
Michal Privoznik
-
Peter Krempa