160 lines
6.3 KiB
Diff
160 lines
6.3 KiB
Diff
|
Usage:
|
||
|
vga="qxl"
|
||
|
|
||
|
Qxl vga support many resolutions that not supported by stdvga,
|
||
|
mainly the 16:9 ones and other high up to 2560x1600.
|
||
|
With QXL you can get improved performance and smooth video also
|
||
|
with high resolutions and high quality.
|
||
|
Require their drivers installed in the domU and spice used
|
||
|
otherwise act as a simple stdvga.
|
||
|
|
||
|
Signed-off-by: Fabio Fantoni <fabio.fantoni@xxxxxxx>
|
||
|
Signed-off-by: Zhou Peng <zpengxen@xxxxxxxxx>
|
||
|
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
|
||
|
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
|
||
|
Acked-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
|
||
|
|
||
|
---
|
||
|
|
||
|
Changes in v16:
|
||
|
- refresh
|
||
|
- improved commit description
|
||
|
|
||
|
Changes in v15:
|
||
|
- refresh
|
||
|
- small code improvements in libxl_dm.c
|
||
|
|
||
|
Changes in v14:
|
||
|
- refresh
|
||
|
- update qemu parameters (from -vga to -device)
|
||
|
|
||
|
NOTES:
|
||
|
Works correctly with windows domUs, tested on windows 7 64 bit
|
||
|
with qxl driver from spice guest tools 0.74.
|
||
|
I tested some resolution not supported by stdvga (1366x768, 1600x900
|
||
|
and 1920x1080) with 32 bit color and all works good equal to kvm.
|
||
|
For now not works on linux domUs when xorg have 100% cpu and black
|
||
|
screen with qxl driver installed.
|
||
|
Seems needed other changes/fixes on xen and/or xorg/qxl driver side
|
||
|
before have it full working with linux domUs.
|
||
|
---
|
||
|
docs/man/xl.cfg.pod.5 | 10 +++++++++-
|
||
|
tools/libxl/libxl_create.c | 13 +++++++++++++
|
||
|
tools/libxl/libxl_dm.c | 8 ++++++++
|
||
|
tools/libxl/libxl_types.idl | 1 +
|
||
|
tools/libxl/xl_cmdimpl.c | 2 ++
|
||
|
5 files changed, 33 insertions(+), 1 deletion(-)
|
||
|
|
||
|
Index: xen-4.5.0-testing/docs/man/xl.cfg.pod.5
|
||
|
===================================================================
|
||
|
--- xen-4.5.0-testing.orig/docs/man/xl.cfg.pod.5
|
||
|
+++ xen-4.5.0-testing/docs/man/xl.cfg.pod.5
|
||
|
@@ -1292,6 +1292,9 @@ qemu-xen-traditional device-model, the a
|
||
|
which is sufficient for 1024x768 at 32 bpp. For the upstream qemu-xen
|
||
|
device-model, the default and minimum is 8 MB.
|
||
|
|
||
|
+For B<qxl> vga, the default is both default and minimal 128MB.
|
||
|
+If B<videoram> is set less than 128MB, an error will be triggered.
|
||
|
+
|
||
|
=item B<stdvga=BOOLEAN>
|
||
|
|
||
|
Select a standard VGA card with VBE (VESA BIOS Extensions) as the
|
||
|
@@ -1303,9 +1306,14 @@ This option is deprecated, use vga="stdv
|
||
|
|
||
|
=item B<vga="STRING">
|
||
|
|
||
|
-Selects the emulated video card (none|stdvga|cirrus).
|
||
|
+Selects the emulated video card (none|stdvga|cirrus|qxl).
|
||
|
The default is cirrus.
|
||
|
|
||
|
+In general, QXL should work with the Spice remote display protocol
|
||
|
+for acceleration, and QXL driver is necessary in guest in this case.
|
||
|
+QXL can also work with the VNC protocol, but it will be like a standard
|
||
|
+VGA without acceleration.
|
||
|
+
|
||
|
=item B<vnc=BOOLEAN>
|
||
|
|
||
|
Allow access to the display via the VNC protocol. This enables the
|
||
|
Index: xen-4.5.0-testing/tools/libxl/libxl_create.c
|
||
|
===================================================================
|
||
|
--- xen-4.5.0-testing.orig/tools/libxl/libxl_create.c
|
||
|
+++ xen-4.5.0-testing/tools/libxl/libxl_create.c
|
||
|
@@ -240,6 +240,10 @@ int libxl__domain_build_info_setdefault(
|
||
|
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
|
||
|
b_info->video_memkb = 0;
|
||
|
break;
|
||
|
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
|
||
|
+ LOG(ERROR,"qemu upstream required for qxl vga");
|
||
|
+ return ERROR_INVAL;
|
||
|
+ break;
|
||
|
case LIBXL_VGA_INTERFACE_TYPE_STD:
|
||
|
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
|
||
|
b_info->video_memkb = 8 * 1024;
|
||
|
@@ -264,6 +268,15 @@ int libxl__domain_build_info_setdefault(
|
||
|
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
|
||
|
b_info->video_memkb = 0;
|
||
|
break;
|
||
|
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
|
||
|
+ if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) {
|
||
|
+ b_info->video_memkb = (128 * 1024);
|
||
|
+ } else if (b_info->video_memkb < (128 * 1024)) {
|
||
|
+ LOG(ERROR,
|
||
|
+ "128 Mib videoram is the minimum for qxl default");
|
||
|
+ return ERROR_INVAL;
|
||
|
+ }
|
||
|
+ break;
|
||
|
case LIBXL_VGA_INTERFACE_TYPE_STD:
|
||
|
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
|
||
|
b_info->video_memkb = 16 * 1024;
|
||
|
Index: xen-4.5.0-testing/tools/libxl/libxl_dm.c
|
||
|
===================================================================
|
||
|
--- xen-4.5.0-testing.orig/tools/libxl/libxl_dm.c
|
||
|
+++ xen-4.5.0-testing/tools/libxl/libxl_dm.c
|
||
|
@@ -244,6 +244,8 @@ static char ** libxl__build_device_model
|
||
|
case LIBXL_VGA_INTERFACE_TYPE_NONE:
|
||
|
flexarray_append_pair(dm_args, "-vga", "none");
|
||
|
break;
|
||
|
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
|
||
|
+ break;
|
||
|
}
|
||
|
|
||
|
if (b_info->u.hvm.boot) {
|
||
|
@@ -590,6 +592,12 @@ static char ** libxl__build_device_model
|
||
|
break;
|
||
|
case LIBXL_VGA_INTERFACE_TYPE_NONE:
|
||
|
break;
|
||
|
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
|
||
|
+ /* QXL have 2 ram regions, ram and vram */
|
||
|
+ flexarray_append_pair(dm_args, "-device",
|
||
|
+ GCSPRINTF("qxl-vga,vram_size_mb=%"PRIu64",ram_size_mb=%"PRIu64,
|
||
|
+ (b_info->video_memkb/2/1024), (b_info->video_memkb/2/1024) ) );
|
||
|
+ break;
|
||
|
}
|
||
|
|
||
|
if (b_info->u.hvm.boot) {
|
||
|
Index: xen-4.5.0-testing/tools/libxl/libxl_types.idl
|
||
|
===================================================================
|
||
|
--- xen-4.5.0-testing.orig/tools/libxl/libxl_types.idl
|
||
|
+++ xen-4.5.0-testing/tools/libxl/libxl_types.idl
|
||
|
@@ -181,6 +181,7 @@ libxl_vga_interface_type = Enumeration("
|
||
|
(1, "CIRRUS"),
|
||
|
(2, "STD"),
|
||
|
(3, "NONE"),
|
||
|
+ (4, "QXL"),
|
||
|
], init_val = "LIBXL_VGA_INTERFACE_TYPE_CIRRUS")
|
||
|
|
||
|
libxl_vendor_device = Enumeration("vendor_device", [
|
||
|
Index: xen-4.5.0-testing/tools/libxl/xl_cmdimpl.c
|
||
|
===================================================================
|
||
|
--- xen-4.5.0-testing.orig/tools/libxl/xl_cmdimpl.c
|
||
|
+++ xen-4.5.0-testing/tools/libxl/xl_cmdimpl.c
|
||
|
@@ -1910,6 +1910,8 @@ skip_vfb:
|
||
|
b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
|
||
|
} else if (!strcmp(buf, "none")) {
|
||
|
b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_NONE;
|
||
|
+ } else if (!strcmp(buf, "qxl")) {
|
||
|
+ b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_QXL;
|
||
|
} else {
|
||
|
fprintf(stderr, "Unknown vga \"%s\" specified\n", buf);
|
||
|
exit(1);
|