<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 17, 2019 at 12:37 PM <<a href="mailto:jcfaracco@gmail.com">jcfaracco@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Julio Faracco <<a href="mailto:jcfaracco@gmail.com" target="_blank">jcfaracco@gmail.com</a>><br>
<br>
This commit adds resolution element with parameters 'x' and 'y' into video<br>
XML domain group definition. Both, properties were added into an element<br>
called 'resolution' and it was added inside 'model' element. They are set<br>
as optional. This element does not follow QEMU properties 'xres' and<br>
'yres' format. Both HTML documentation and schema were changed too. This<br>
commit includes a simple test case to cover resolution for QEMU video<br>
models. The new XML format for resolution looks like:<br>
<br>
<model ...><br>
<resolution x='800' y='600'/><br>
</model><br></blockquote><div>Please mention that it could fix the bug:</div><div><a href="https://bugzilla.redhat.com/show_bug.cgi?id=1485793">https://bugzilla.redhat.com/show_bug.cgi?id=1485793</a> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Signed-off-by: Julio Faracco <<a href="mailto:jcfaracco@gmail.com" target="_blank">jcfaracco@gmail.com</a>><br>
---<br>
docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a> | 5 +-<br>
docs/schemas/domaincommon.rng | 10 +++<br>
src/conf/domain_conf.c | 63 ++++++++++++++++++-<br>
src/conf/domain_conf.h | 5 ++<br>
src/conf/virconftypes.h | 3 +<br>
.../video-qxl-resolution.args | 32 ++++++++++<br>
.../qemuxml2argvdata/video-qxl-resolution.xml | 40 ++++++++++++<br>
tests/qemuxml2argvtest.c | 4 ++<br>
.../video-qxl-resolution.xml | 40 ++++++++++++<br>
tests/qemuxml2xmltest.c | 1 +<br>
10 files changed, 201 insertions(+), 2 deletions(-)<br>
create mode 100644 tests/qemuxml2argvdata/video-qxl-resolution.args<br>
create mode 100644 tests/qemuxml2argvdata/video-qxl-resolution.xml<br>
create mode 100644 tests/qemuxml2xmloutdata/video-qxl-resolution.xml<br>
<br>
diff --git a/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a> b/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a><br>
index 500f114f41..962766b792 100644<br>
--- a/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a><br>
+++ b/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a><br>
@@ -7077,7 +7077,10 @@ qemu-kvm -net nic,model=? /dev/null<br>
<code>vgamem</code> (<span class="since">since 1.2.11</span>) to set<br>
the size of VGA framebuffer for fallback mode of QXL device.<br>
Attribute <code>vram64</code> (<span class="since">since 1.3.3</span>)<br>
- extends secondary bar and makes it addressable as 64bit memory.<br>
+ extends secondary bar and makes it addressable as 64bit memory. For<br>
+ resolution settings, there are <code>x</code> and <code>y</code><br>
+ (<span class="since">since 5.9.0</span>) optional attributes to set<br>
+ minimum resolution for model.<br>
</p><br>
</dd><br>
<br>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng<br>
index ead5a25068..e06f892da3 100644<br>
--- a/docs/schemas/domaincommon.rng<br>
+++ b/docs/schemas/domaincommon.rng<br>
@@ -3656,6 +3656,16 @@<br>
</optional><br>
</element><br>
</optional><br>
+ <optional><br>
+ <element name="resolution"><br>
+ <attribute name="x"><br>
+ <ref name="unsignedInt"/><br>
+ </attribute><br>
+ <attribute name="y"><br>
+ <ref name="unsignedInt"/><br>
+ </attribute><br>
+ </element><br>
+ </optional><br>
</element><br>
</optional><br>
<optional><br>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c<br>
index 2e6a113de3..88e93f6fb8 100644<br>
--- a/src/conf/domain_conf.c<br>
+++ b/src/conf/domain_conf.c<br>
@@ -15345,6 +15345,52 @@ virDomainVideoAccelDefParseXML(xmlNodePtr node)<br>
return def;<br>
}<br>
<br>
+static virDomainVideoResolutionDefPtr<br>
+virDomainVideoResolutionDefParseXML(xmlNodePtr node)<br>
+{<br>
+ xmlNodePtr cur;<br>
+ virDomainVideoResolutionDefPtr def;<br>
+ g_autofree char *x = NULL;<br>
+ g_autofree char *y = NULL;<br>
+<br>
+ cur = node->children;<br>
+ while (cur != NULL) {<br>
+ if (cur->type == XML_ELEMENT_NODE) {<br>
+ if (!x && !y &&<br>
+ virXMLNodeNameEqual(cur, "resolution")) {<br>
+ x = virXMLPropString(cur, "x");<br>
+ y = virXMLPropString(cur, "y");<br>
+ }<br>
+ }<br>
+ cur = cur->next;<br>
+ }<br>
+<br>
+ if (!x || !y)<br>
+ return NULL;<br>
+<br>
+ if (VIR_ALLOC(def) < 0)<br>
+ goto cleanup;<br>
+<br>
+ if (x) {<br>
+ if (virStrToLong_uip(x, NULL, 10, &def->x) < 0) {<br>
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
+ _("cannot parse video x-resolution '%s'"), x);<br>
+ goto cleanup;<br>
+ }<br>
+ }<br>
+<br>
+ if (y) {<br>
+ if (virStrToLong_uip(y, NULL, 10, &def->y) < 0) {<br>
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
+ _("cannot parse video y-resolution '%s'"), y);<br>
+ goto cleanup;<br>
+ }<br>
+ }<br>
+<br>
+ cleanup:<br>
+ return def;<br>
+}<br>
+<br>
static virDomainVideoDriverDefPtr<br>
virDomainVideoDriverDefParseXML(xmlNodePtr node)<br>
{<br>
@@ -15424,6 +15470,7 @@ virDomainVideoDefParseXML(virDomainXMLOptionPtr xmlopt,<br>
}<br>
<br>
def->accel = virDomainVideoAccelDefParseXML(cur);<br>
+ def->res = virDomainVideoResolutionDefParseXML(cur);<br>
}<br>
if (virXMLNodeNameEqual(cur, "driver")) {<br>
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)<br>
@@ -26515,6 +26562,18 @@ virDomainVideoAccelDefFormat(virBufferPtr buf,<br>
virBufferAddLit(buf, "/>\n");<br>
}<br>
<br>
+static void<br>
+virDomainVideoResolutionDefFormat(virBufferPtr buf,<br>
+ virDomainVideoResolutionDefPtr def)<br>
+{<br>
+ virBufferAddLit(buf, "<resolution");<br>
+ if (def->x && def->y) {<br>
+ virBufferAsprintf(buf, " x='%u' y='%u'",<br>
+ def->x, def->y);<br>
+ }<br>
+ virBufferAddLit(buf, "/>\n");<br>
+}<br>
+<br>
static int<br>
virDomainVideoDefFormat(virBufferPtr buf,<br>
virDomainVideoDefPtr def,<br>
@@ -26562,11 +26621,13 @@ virDomainVideoDefFormat(virBufferPtr buf,<br>
virBufferAsprintf(buf, " heads='%u'", def->heads);<br>
if (def->primary)<br>
virBufferAddLit(buf, " primary='yes'");<br>
- if (def->accel) {<br>
+ if (def->accel || def->res) {<br>
virBufferAddLit(buf, ">\n");<br>
virBufferAdjustIndent(buf, 2);<br>
if (def->accel)<br>
virDomainVideoAccelDefFormat(buf, def->accel);<br>
+ if (def->res)<br>
+ virDomainVideoResolutionDefFormat(buf, def->res);<br>
virBufferAdjustIndent(buf, -2);<br>
virBufferAddLit(buf, "</model>\n");<br>
} else {<br>
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h<br>
index edac6250e4..b33e5334f4 100644<br>
--- a/src/conf/domain_conf.h<br>
+++ b/src/conf/domain_conf.h<br>
@@ -1421,6 +1421,10 @@ struct _virDomainVideoAccelDef {<br>
char *rendernode;<br>
};<br>
<br>
+struct _virDomainVideoResolutionDef {<br>
+ unsigned int x;<br>
+ unsigned int y;<br>
+};<br>
<br>
struct _virDomainVideoDriverDef {<br>
virDomainVideoVGAConf vgaconf;<br>
@@ -1438,6 +1442,7 @@ struct _virDomainVideoDef {<br>
unsigned int heads;<br>
bool primary;<br>
virDomainVideoAccelDefPtr accel;<br>
+ virDomainVideoResolutionDefPtr res;<br>
virDomainVideoDriverDefPtr driver;<br>
virDomainDeviceInfo info;<br>
virDomainVirtioOptionsPtr virtio;<br>
diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h<br>
index a15cfb5f9e..462842f324 100644<br>
--- a/src/conf/virconftypes.h<br>
+++ b/src/conf/virconftypes.h<br>
@@ -324,6 +324,9 @@ typedef virDomainVcpuDef *virDomainVcpuDefPtr;<br>
typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef;<br>
typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr;<br>
<br>
+typedef struct _virDomainVideoResolutionDef virDomainVideoResolutionDef;<br>
+typedef virDomainVideoResolutionDef *virDomainVideoResolutionDefPtr;<br>
+<br>
typedef struct _virDomainVideoDef virDomainVideoDef;<br>
typedef virDomainVideoDef *virDomainVideoDefPtr;<br>
<br>
diff --git a/tests/qemuxml2argvdata/video-qxl-resolution.args b/tests/qemuxml2argvdata/video-qxl-resolution.args<br>
new file mode 100644<br>
index 0000000000..1dbcd660f1<br>
--- /dev/null<br>
+++ b/tests/qemuxml2argvdata/video-qxl-resolution.args<br>
@@ -0,0 +1,32 @@<br>
+LC_ALL=C \<br>
+PATH=/bin \<br>
+HOME=/tmp/lib/domain--1-QEMUGuest1 \<br>
+USER=test \<br>
+LOGNAME=test \<br>
+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \<br>
+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \<br>
+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \<br>
+QEMU_AUDIO_DRV=none \<br>
+/usr/bin/qemu-system-i686 \<br>
+-name QEMUGuest1 \<br>
+-S \<br>
+-machine pc,accel=tcg,usb=off,dump-guest-core=off \<br>
+-m 214 \<br>
+-realtime mlock=off \<br>
+-smp 1,sockets=1,cores=1,threads=1 \<br>
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \<br>
+-display none \<br>
+-no-user-config \<br>
+-nodefaults \<br>
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\<br>
+server,nowait \<br>
+-mon chardev=charmonitor,id=monitor,mode=control \<br>
+-rtc base=utc \<br>
+-no-shutdown \<br>
+-no-acpi \<br>
+-usb \<br>
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \<br>
+-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \<br>
+-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vgamem_mb=8,\<br>
+bus=pci.0,addr=0x2 \<br>
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3<br>
diff --git a/tests/qemuxml2argvdata/video-qxl-resolution.xml b/tests/qemuxml2argvdata/video-qxl-resolution.xml<br>
new file mode 100644<br>
index 0000000000..6ba2817002<br>
--- /dev/null<br>
+++ b/tests/qemuxml2argvdata/video-qxl-resolution.xml<br>
@@ -0,0 +1,40 @@<br>
+<domain type='qemu'><br>
+ <name>QEMUGuest1</name><br>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid><br>
+ <memory unit='KiB'>219136</memory><br>
+ <currentMemory unit='KiB'>219136</currentMemory><br>
+ <vcpu placement='static'>1</vcpu><br>
+ <os><br>
+ <type arch='i686' machine='pc'>hvm</type><br>
+ <boot dev='hd'/><br>
+ </os><br>
+ <clock offset='utc'/><br>
+ <on_poweroff>destroy</on_poweroff><br>
+ <on_reboot>restart</on_reboot><br>
+ <on_crash>destroy</on_crash><br>
+ <devices><br>
+ <emulator>/usr/bin/qemu-system-i686</emulator><br>
+ <disk type='block' device='disk'><br>
+ <driver name='qemu' type='raw'/><br>
+ <source dev='/dev/HostVG/QEMUGuest1'/><br>
+ <target dev='hda' bus='ide'/><br>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/><br>
+ </disk><br>
+ <controller type='usb' index='0'><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/><br>
+ </controller><br>
+ <controller type='ide' index='0'><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/><br>
+ </controller><br>
+ <controller type='pci' index='0' model='pci-root'/><br>
+ <input type='mouse' bus='ps2'/><br>
+ <input type='keyboard' bus='ps2'/><br>
+ <video><br>
+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='1' primary='yes'/><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/><br>
+ </video><br>
+ <memballoon model='virtio'><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/><br>
+ </memballoon><br>
+ </devices><br>
+</domain><br>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c<br>
index 5212ce50bd..90edd7a844 100644<br>
--- a/tests/qemuxml2argvtest.c<br>
+++ b/tests/qemuxml2argvtest.c<br>
@@ -2056,6 +2056,10 @@ mymain(void)<br>
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,<br>
QEMU_CAPS_DEVICE_QXL,<br>
QEMU_CAPS_QXL_MAX_OUTPUTS);<br>
+ DO_TEST("video-qxl-resolution",<br>
+ QEMU_CAPS_DEVICE_VIDEO_PRIMARY,<br>
+ QEMU_CAPS_DEVICE_QXL,<br>
+ QEMU_CAPS_QXL_VGAMEM);<br>
DO_TEST("video-virtio-gpu-device",<br>
QEMU_CAPS_DEVICE_VIRTIO_GPU,<br>
QEMU_CAPS_DEVICE_VIDEO_PRIMARY);<br>
diff --git a/tests/qemuxml2xmloutdata/video-qxl-resolution.xml b/tests/qemuxml2xmloutdata/video-qxl-resolution.xml<br>
new file mode 100644<br>
index 0000000000..6ba2817002<br>
--- /dev/null<br>
+++ b/tests/qemuxml2xmloutdata/video-qxl-resolution.xml<br>
@@ -0,0 +1,40 @@<br>
+<domain type='qemu'><br>
+ <name>QEMUGuest1</name><br>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid><br>
+ <memory unit='KiB'>219136</memory><br>
+ <currentMemory unit='KiB'>219136</currentMemory><br>
+ <vcpu placement='static'>1</vcpu><br>
+ <os><br>
+ <type arch='i686' machine='pc'>hvm</type><br>
+ <boot dev='hd'/><br>
+ </os><br>
+ <clock offset='utc'/><br>
+ <on_poweroff>destroy</on_poweroff><br>
+ <on_reboot>restart</on_reboot><br>
+ <on_crash>destroy</on_crash><br>
+ <devices><br>
+ <emulator>/usr/bin/qemu-system-i686</emulator><br>
+ <disk type='block' device='disk'><br>
+ <driver name='qemu' type='raw'/><br>
+ <source dev='/dev/HostVG/QEMUGuest1'/><br>
+ <target dev='hda' bus='ide'/><br>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/><br>
+ </disk><br>
+ <controller type='usb' index='0'><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/><br>
+ </controller><br>
+ <controller type='ide' index='0'><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/><br>
+ </controller><br>
+ <controller type='pci' index='0' model='pci-root'/><br>
+ <input type='mouse' bus='ps2'/><br>
+ <input type='keyboard' bus='ps2'/><br>
+ <video><br>
+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='1' primary='yes'/><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/><br>
+ </video><br>
+ <memballoon model='virtio'><br>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/><br>
+ </memballoon><br>
+ </devices><br>
+</domain><br>
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c<br>
index b9364f942f..4c7ba98367 100644<br>
--- a/tests/qemuxml2xmltest.c<br>
+++ b/tests/qemuxml2xmltest.c<br>
@@ -1210,6 +1210,7 @@ mymain(void)<br>
QEMU_CAPS_DEVICE_QXL);<br>
DO_TEST("video-qxl-heads", NONE);<br>
DO_TEST("video-qxl-noheads", NONE);<br>
+ DO_TEST("video-qxl-resolution", NONE);<br>
DO_TEST("video-virtio-gpu-secondary", NONE);<br>
DO_TEST("video-virtio-gpu-ccw",<br>
QEMU_CAPS_CCW,<br>
-- <br>
2.20.1<br>
<br>
--<br>
libvir-list mailing list<br>
<a href="mailto:libvir-list@redhat.com" target="_blank">libvir-list@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/libvir-list" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/libvir-list</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Best regards,</div><div dir="ltr">-----------------------------------<br></div><div dir="ltr">Han Han<br>Quality Engineer<br>Redhat.<br><br>Email: <a href="mailto:hhan@redhat.com" target="_blank">hhan@redhat.com</a><br>Phone: +861065339333<br></div></div></div></div></div></div></div>