- qemu: capabilities: Apply 'capability_filters' configration option on all capabilities (RHEL-177646) - qemu: capabilities: Export 'virQEMUCapsNewCopy' outside of 'qemu_capspriv' (RHEL-177646) - qemu: Allow reuse of 'qemuProcessStartUpdateCustomCaps' (RHEL-177646) - qemu: validate: Validate VM config with qemuCaps influenced by <qemu:capabilities> (RHEL-177646) - qemu: postparse: Process VM config with qemuCaps influenced by <qemu:capabilities> (RHEL-177646) - virQEMUCapsCacheLookupDefault: Fix error message when no emulators are installed (RHEL-177646) - qemuxmlconfdata: un-symlink 'video-virtio-vga-gpu-gl' output (RHEL-177646) - qemuxmlconftest: Add 'video-virtio-vga' invocation with QEMU_CAPS_DEVICE_VIRTIO_VGA disabled (RHEL-177646) - qemuxmlconftest: Add test cases for configs asking for 'virtio-gpu-gl' or 'virtio-vga-gl' without the capability (RHEL-177646) - qemuxmlconftest: Add invocation of 'video-virtio-vga-gpu-gl' with missing caps and VIR_DOMAIN_DEF_PARSE_ABI_UPDATE (RHEL-177646) - qemustatusxml2xml: Add test case capturing virtio video device (RHEL-177646) - virDomainVideoDefFormat: Use 'virXMLFormatElement' instead of custom formatter (RHEL-177646) - conf: Add fields for recording actually-selected virtio video device (RHEL-177646) - qemuxmlconftest: Add test case for specifying 'virtio-gpu' where 'virtio-vga' would be picked (RHEL-177646) - qemuDeviceVideoGetModel: Directly return picked model (RHEL-177646) - qemu: postparse: Fill in selected virtio video frondend device in the XML (RHEL-177646) - qemuValidateDomainDeviceDefVideo: Fix checks of virtio video devices (RHEL-177646) - qemuDeviceVideoGetModel: Remove logic for selecting 'virtio' devices (RHEL-177646) - qemuDeviceVideoGetModel: Simplify by relying on checks from 'qemuValidateDomainDeviceDefVideo' (RHEL-177646) - qemu: Remove 'qemuDomainSupportsVideoVga' (RHEL-177646) Resolves: RHEL-177646
146 lines
5.9 KiB
Diff
146 lines
5.9 KiB
Diff
From 26a62b18ad904305964a92173aea7c98fd35abf7 Mon Sep 17 00:00:00 2001
|
|
Message-ID: <26a62b18ad904305964a92173aea7c98fd35abf7.1784297532.git.jdenemar@redhat.com>
|
|
From: Peter Krempa <pkrempa@redhat.com>
|
|
Date: Mon, 8 Jun 2026 11:00:31 +0200
|
|
Subject: [PATCH] virDomainVideoDefFormat: Use 'virXMLFormatElement' instead of
|
|
custom formatter
|
|
|
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
|
(cherry picked from commit b64f4bab656a019da307054fb354a3fe36b36b4f)
|
|
|
|
https://redhat.atlassian.net/browse/RHEL-186019
|
|
|
|
https://redhat.atlassian.net/browse/RHEL-177646 (rhel-9.9)
|
|
---
|
|
src/conf/domain_conf.c | 79 ++++++++++++++++++++----------------------
|
|
1 file changed, 37 insertions(+), 42 deletions(-)
|
|
|
|
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
|
index cec0f88f0f..dc19e258dd 100644
|
|
--- a/src/conf/domain_conf.c
|
|
+++ b/src/conf/domain_conf.c
|
|
@@ -27034,6 +27034,9 @@ static void
|
|
virDomainVideoAccelDefFormat(virBuffer *buf,
|
|
virDomainVideoAccelDef *def)
|
|
{
|
|
+ if (!def)
|
|
+ return;
|
|
+
|
|
virBufferAddLit(buf, "<acceleration");
|
|
if (def->accel3d) {
|
|
virBufferAsprintf(buf, " accel3d='%s'",
|
|
@@ -27051,6 +27054,9 @@ static void
|
|
virDomainVideoResolutionDefFormat(virBuffer *buf,
|
|
virDomainVideoResolutionDef *def)
|
|
{
|
|
+ if (!def)
|
|
+ return;
|
|
+
|
|
virBufferAddLit(buf, "<resolution");
|
|
if (def->x && def->y) {
|
|
virBufferAsprintf(buf, " x='%u' y='%u'",
|
|
@@ -27065,7 +27071,10 @@ virDomainVideoDefFormat(virBuffer *buf,
|
|
unsigned int flags)
|
|
{
|
|
const char *model = virDomainVideoTypeToString(def->type);
|
|
- g_auto(virBuffer) driverBuf = VIR_BUFFER_INITIALIZER;
|
|
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
|
+ g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
|
|
+ g_auto(virBuffer) modelAttrBuf = VIR_BUFFER_INITIALIZER;
|
|
+ g_auto(virBuffer) modelChildBuf = VIR_BUFFER_INIT_CHILD(&childBuf);
|
|
|
|
if (!model) {
|
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
@@ -27073,61 +27082,47 @@ virDomainVideoDefFormat(virBuffer *buf,
|
|
return -1;
|
|
}
|
|
|
|
- virBufferAddLit(buf, "<video>\n");
|
|
- virBufferAdjustIndent(buf, 2);
|
|
- virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
|
|
- if (virBufferUse(&driverBuf) || (def->driver && def->driver->vgaconf) ||
|
|
- def->backend != VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT) {
|
|
- virBufferAddLit(buf, "<driver");
|
|
- if (virBufferUse(&driverBuf))
|
|
- virBufferAddBuffer(buf, &driverBuf);
|
|
- if (def->driver && def->driver->vgaconf)
|
|
- virBufferAsprintf(buf, " vgaconf='%s'",
|
|
- virDomainVideoVGAConfTypeToString(def->driver->vgaconf));
|
|
- if (def->backend != VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT)
|
|
- virBufferAsprintf(buf, " name='%s'",
|
|
- virDomainVideoBackendTypeToString(def->backend));
|
|
- virBufferAddLit(buf, "/>\n");
|
|
- }
|
|
- virBufferAsprintf(buf, "<model type='%s'",
|
|
- model);
|
|
+ virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
|
|
+ if (def->driver && def->driver->vgaconf)
|
|
+ virBufferAsprintf(&driverAttrBuf, " vgaconf='%s'",
|
|
+ virDomainVideoVGAConfTypeToString(def->driver->vgaconf));
|
|
+ if (def->backend != VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT)
|
|
+ virBufferAsprintf(&driverAttrBuf, " name='%s'",
|
|
+ virDomainVideoBackendTypeToString(def->backend));
|
|
+
|
|
+ virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL);
|
|
+
|
|
+ virBufferAsprintf(&modelAttrBuf, " type='%s'", model);
|
|
if (def->ram)
|
|
- virBufferAsprintf(buf, " ram='%u'", def->ram);
|
|
+ virBufferAsprintf(&modelAttrBuf, " ram='%u'", def->ram);
|
|
if (def->vram)
|
|
- virBufferAsprintf(buf, " vram='%u'", def->vram);
|
|
+ virBufferAsprintf(&modelAttrBuf, " vram='%u'", def->vram);
|
|
if (def->vram64)
|
|
- virBufferAsprintf(buf, " vram64='%u'", def->vram64);
|
|
+ virBufferAsprintf(&modelAttrBuf, " vram64='%u'", def->vram64);
|
|
if (def->vgamem)
|
|
- virBufferAsprintf(buf, " vgamem='%u'", def->vgamem);
|
|
+ virBufferAsprintf(&modelAttrBuf, " vgamem='%u'", def->vgamem);
|
|
if (def->heads)
|
|
- virBufferAsprintf(buf, " heads='%u'", def->heads);
|
|
+ virBufferAsprintf(&modelAttrBuf, " heads='%u'", def->heads);
|
|
if (def->primary)
|
|
- virBufferAddLit(buf, " primary='yes'");
|
|
+ virBufferAddLit(&modelAttrBuf, " primary='yes'");
|
|
if (def->blob != VIR_TRISTATE_SWITCH_ABSENT)
|
|
- virBufferAsprintf(buf, " blob='%s'", virTristateSwitchTypeToString(def->blob));
|
|
+ virBufferAsprintf(&modelAttrBuf, " blob='%s'", virTristateSwitchTypeToString(def->blob));
|
|
if (def->edid != VIR_TRISTATE_SWITCH_ABSENT)
|
|
- virBufferAsprintf(buf, " edid='%s'", virTristateSwitchTypeToString(def->edid));
|
|
- if (def->accel || def->res) {
|
|
- virBufferAddLit(buf, ">\n");
|
|
- virBufferAdjustIndent(buf, 2);
|
|
- if (def->accel)
|
|
- virDomainVideoAccelDefFormat(buf, def->accel);
|
|
- if (def->res)
|
|
- virDomainVideoResolutionDefFormat(buf, def->res);
|
|
- virBufferAdjustIndent(buf, -2);
|
|
- virBufferAddLit(buf, "</model>\n");
|
|
- } else {
|
|
- virBufferAddLit(buf, "/>\n");
|
|
- }
|
|
+ virBufferAsprintf(&modelAttrBuf, " edid='%s'", virTristateSwitchTypeToString(def->edid));
|
|
|
|
- virDomainDeviceInfoFormat(buf, &def->info, flags);
|
|
+ virDomainVideoAccelDefFormat(&modelChildBuf, def->accel);
|
|
+ virDomainVideoResolutionDefFormat(&modelChildBuf, def->res);
|
|
|
|
- virBufferAdjustIndent(buf, -2);
|
|
- virBufferAddLit(buf, "</video>\n");
|
|
+ virXMLFormatElement(&childBuf, "model", &modelAttrBuf, &modelChildBuf);
|
|
+
|
|
+ virDomainDeviceInfoFormat(&childBuf, &def->info, flags);
|
|
+
|
|
+ virXMLFormatElement(buf, "video", NULL, &childBuf);
|
|
|
|
return 0;
|
|
}
|
|
|
|
+
|
|
static int
|
|
virDomainInputDefFormat(virBuffer *buf,
|
|
virDomainInputDef *def,
|
|
--
|
|
2.55.0
|