]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
bhyve: add support for setting fbuf resolution
authorFabian Freyer <fabian.freyer@physik.tu-berlin.de>
Wed, 6 May 2020 13:35:53 +0000 (13:35 +0000)
committerRoman Bogorodskiy <bogorodskiy@gmail.com>
Tue, 22 Sep 2020 13:19:26 +0000 (17:19 +0400)
The resolution of the VNC framebuffer can now be set via the resolution
definition introduced in 5.9.0.

Also, add "gop" to the list of model types  the <resolution/>
sub-element is valid for.

Signed-off-by: Fabian Freyer <fabian.freyer@physik.tu-berlin.de>
Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
13 files changed:
NEWS.rst
docs/formatdomain.rst
src/bhyve/bhyve_command.c
src/bhyve/bhyve_parse_command.c
tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args [new file with mode: 0644]
tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml [new file with mode: 0644]
tests/bhyveargv2xmltest.c
tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args [new file with mode: 0644]
tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs [new file with mode: 0644]
tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml [new file with mode: 0644]
tests/bhyvexml2argvtest.c
tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml [new file with mode: 0644]
tests/bhyvexml2xmltest.c

index 685c5e222504479ff22b13b2d795119707dfa650..bb48f5bd43989ca51044dd1325faee74ae7fd72b 100644 (file)
--- a/NEWS.rst
+++ b/NEWS.rst
@@ -20,6 +20,11 @@ v6.8.0 (unreleased)
     attribute of the device's ``<source>`` element can be used to disable the
     filtering and allow all guest writes to the configuration space.
 
+  * bhyve: Support setting the framebuffer resolution
+
+    Libvirt can now set the framebuffer's "w" and "h" parameters
+    using the ``resolution`` element.
+
 * **Improvements**
 
   * qemu: Allow migration over UNIX sockets
index d5930a4ac17e313aea5ba0b0a727c55ff32819a1..888db5ea29381b11fbd567b4de0deb4f4182454b 100644 (file)
@@ -5822,7 +5822,8 @@ A video device.
    :since:`Since 5.9.0` , the ``model`` element may also have an optional
    ``resolution`` sub-element. The ``resolution`` element has attributes ``x``
    and ``y`` to set the minimum resolution for the video device. This
-   sub-element is valid for model types "vga", "qxl", "bochs", and "virtio".
+   sub-element is valid for model types "vga", "qxl", "bochs", "gop",
+   and "virtio".
 
 ``acceleration``
    Configure if video acceleration should be enabled.
index 4df5baabdf2b53c50ae43cff8519fef71cd4f40b..176a339d5a31be7cfcc5ecd7b18474bf70de8983 100644 (file)
@@ -468,6 +468,9 @@ bhyveBuildGraphicsArgStr(const virDomainDef *def,
         return -1;
     }
 
+    if (video->res)
+        virBufferAsprintf(&opt, ",w=%d,h=%d", video->res->x, video->res->y);
+
     if (video->driver)
         virBufferAsprintf(&opt, ",vga=%s",
                           virDomainVideoVGAConfTypeToString(video->driver->vgaconf));
index 604bd6b22ed94ca55f7fee45e0ec6f74dee0d835..7f9ce0ca6727e6747957cd04930c37620b746d81 100644 (file)
@@ -621,6 +621,26 @@ bhyveParsePCIFbuf(virDomainDefPtr def,
             if (virStrToLong_i(param, NULL, 10, &graphics->data.vnc.port))
                 goto error;
         }
+
+        if (STRPREFIX(param, "w=")) {
+            param += strlen("w=");
+
+            if (video->res == NULL)
+                video->res = g_new0(virDomainVideoResolutionDef, 1);
+
+            if (virStrToLong_uip(param, NULL, 10, &video->res->x))
+                goto error;
+        }
+
+        if (STRPREFIX(param, "h=")) {
+            param += strlen("h=");
+
+            if (video->res == NULL)
+                video->res = g_new0(virDomainVideoResolutionDef, 1);
+
+            if (virStrToLong_uip(param, NULL, 10, &video->res->y))
+                goto error;
+        }
     }
 
  cleanup:
diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args b/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args
new file mode 100644 (file)
index 0000000..e5e2c0f
--- /dev/null
@@ -0,0 +1,10 @@
+/usr/sbin/bhyve \
+-c 1 \
+-m 214 \
+-u \
+-H \
+-P \
+-s 0:0,hostbridge \
+-l bootrom,/path/to/test.fd \
+-s 2:0,fbuf,tcp=127.0.0.1:5904,w=1920,h=1080 \
+-s 1,lpc bhyve
diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml b/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml
new file mode 100644 (file)
index 0000000..f8fa0ed
--- /dev/null
@@ -0,0 +1,24 @@
+<domain type='bhyve'>
+  <name>bhyve</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219136</memory>
+  <currentMemory unit='KiB'>219136</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type>hvm</type>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <graphics type='vnc' port='5904' autoport='no' listen='127.0.0.1'>
+      <listen type='address' address='127.0.0.1'/>
+    </graphics>
+    <video>
+      <model type='default' heads='1'>
+        <resolution x='1920' y='1080'/>
+      </model>
+    </video>
+  </devices>
+</domain>
index 0c0383f593af7f13d995546c66f388485b79c6d2..4bf39d50dcc5d6c54965d60cfe02f200b9cd5b32 100644 (file)
@@ -186,6 +186,7 @@ mymain(void)
     DO_TEST("vnc-vga-on");
     DO_TEST("vnc-vga-off");
     DO_TEST("vnc-vga-io");
+    DO_TEST("vnc-resolution");
 
     virObjectUnref(driver.caps);
     virObjectUnref(driver.xmlopt);
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args
new file mode 100644 (file)
index 0000000..5e54da6
--- /dev/null
@@ -0,0 +1,10 @@
+/usr/sbin/bhyve \
+-c 1 \
+-m 214 \
+-u \
+-H \
+-P \
+-s 0:0,hostbridge \
+-l bootrom,/path/to/test.fd \
+-s 1:0,lpc \
+-s 2:0,fbuf,tcp=127.0.0.1:5904,w=1920,h=1080 bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs
new file mode 100644 (file)
index 0000000..421376d
--- /dev/null
@@ -0,0 +1 @@
+dummy
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml
new file mode 100644 (file)
index 0000000..637a121
--- /dev/null
@@ -0,0 +1,20 @@
+<domain type='bhyve'>
+  <name>bhyve</name>
+  <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+  <memory>219136</memory>
+  <vcpu>1</vcpu>
+  <os>
+    <type>hvm</type>
+    <loader readonly="yes" type="pflash">/path/to/test.fd</loader>
+  </os>
+  <devices>
+    <video>
+      <model type='gop' heads='1' primary='yes'>
+        <resolution x="1920" y="1080"/>
+      </model>
+    </video>
+    <graphics type='vnc' port='5904'>
+      <listen type='address' address='127.0.0.1'/>
+    </graphics>
+  </devices>
+</domain>
index 2167cd6310270d3335663e910c89ee3ff2fbe368..d4c42757023d15eebaaf907325b9cab518aa843f 100644 (file)
@@ -197,6 +197,7 @@ mymain(void)
     DO_TEST("vnc-vgaconf-off");
     DO_TEST("vnc-vgaconf-io");
     DO_TEST("vnc-autoport");
+    DO_TEST("vnc-resolution");
     DO_TEST("cputopology");
     DO_TEST_FAILURE("cputopology-nvcpu-mismatch");
     DO_TEST("commandline");
diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml
new file mode 100644 (file)
index 0000000..7984353
--- /dev/null
@@ -0,0 +1,31 @@
+<domain type='bhyve'>
+  <name>bhyve</name>
+  <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+  <memory unit='KiB'>219136</memory>
+  <currentMemory unit='KiB'>219136</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='x86_64'>hvm</type>
+    <loader readonly='yes' type='pflash'>/path/to/test.fd</loader>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <controller type='pci' index='0' model='pci-root'/>
+    <controller type='isa' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
+    </controller>
+    <graphics type='vnc' port='5904' autoport='no' listen='127.0.0.1'>
+      <listen type='address' address='127.0.0.1'/>
+    </graphics>
+    <video>
+      <model type='gop' heads='1' primary='yes'>
+        <resolution x='1920' y='1080'/>
+      </model>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
+    </video>
+  </devices>
+</domain>
index 3bf2187250e167971e094e75b81c8d3c51d60667..b266e8b9340f125df2c08da1660b0f5cd3ddf300 100644 (file)
@@ -106,6 +106,7 @@ mymain(void)
     DO_TEST_DIFFERENT("vnc-vgaconf-off");
     DO_TEST_DIFFERENT("vnc-vgaconf-io");
     DO_TEST_DIFFERENT("vnc-autoport");
+    DO_TEST_DIFFERENT("vnc-resolution");
     DO_TEST_DIFFERENT("commandline");
     DO_TEST_DIFFERENT("msrs");
     DO_TEST_DIFFERENT("sound");