fantonifabio@tiscali.it
2013-Feb-11 10:58 UTC
[PATCH v9] tools/libxl: Add qxl vga interface support for upstream qemu
From: Fabio Fantoni <fabio.fantoni@heliman.it>
Usage:
vga="qxl"
Changes from v8:
- vga=qxl instead of qxl=1 to use it.
- Show an error and exit if vga="qxl" without qemu upstream.
- Other small improvements.
Required patches:
- Improve videoram setting v5
- Added vga parameter for hvm domUs
Signed-off-by: Fabio Fantoni <fabio.fantoni@heliman.it>
Signed-off-by: Zhou Peng <zpengxen@gmail.com>
---
docs/man/xl.cfg.pod.5 | 10 +++++++++-
tools/libxl/libxl_create.c | 17 +++++++++++++++++
tools/libxl/libxl_dm.c | 13 +++++++++++++
tools/libxl/libxl_types.idl | 1 +
tools/libxl/xl_cmdimpl.c | 3 +++
5 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index 9862842..a3b3645 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -984,6 +984,9 @@ the amount of video ram is fixed at 4MB which is sufficient
for 1024x768 at 32 bpp and videoram option is currently working
only when using the upstream qemu-xen device-model.
+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
@@ -995,9 +998,14 @@ This option is deprecated, use vga="stdvga"
instead.
=item B<vga="STRING">
-Selects the emulated video card (stdvga|cirrus).
+Selects the emulated video card (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
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index cf545ef..67b5e6e 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -197,6 +197,23 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
case LIBXL_DOMAIN_TYPE_HVM:
if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT)
b_info->shadow_memkb = 0;
+
+ if (b_info->u.hvm.vga.kind == LIBXL_VGA_INTERFACE_TYPE_QXL) {
+ if (b_info->device_model_version =+
LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
+ 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;
+ }
+ } else {
+ LOG(ERROR,"qemu upstream required for qxl vga");
+ return ERROR_INVAL;
+ }
+ }
+
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
b_info->video_memkb = 8 * 1024;
else if (b_info->video_memkb < 8192){
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index a2c99bd..59fc86a 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -181,6 +181,8 @@ static char ** libxl__build_device_model_args_old(libxl__gc
*gc,
break;
case LIBXL_VGA_INTERFACE_TYPE_CIRRUS:
break;
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
+ break;
}
if (b_info->u.hvm.boot) {
@@ -440,6 +442,17 @@ static char ** libxl__build_device_model_args_new(libxl__gc
*gc,
NULL);
}
break;
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
+ /*QXL have 2 ram regions, ram and vram*/
+ flexarray_vappend(dm_args, "-vga", "qxl",
NULL);
+ if (b_info->video_memkb) {
+ flexarray_vappend(dm_args, "-global",
+ libxl__sprintf(gc, "qxl-vga.vram_size_mb=%lu",
+ (b_info->video_memkb/2/1024)), "-global",
+ libxl__sprintf(gc, "qxl-vga.ram_size_mb=%lu",
+ (b_info->video_memkb/2/1024)), NULL);
+ }
+ break;
}
if (b_info->u.hvm.boot) {
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index acc4bc9..3f90f12 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -130,6 +130,7 @@ libxl_shutdown_reason =
Enumeration("shutdown_reason", [
libxl_vga_interface_type = Enumeration("vga_interface_type", [
(1, "CIRRUS"),
(2, "STD"),
+ (3, "QXL"),
], init_val = 0)
#
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index f9101ba..b20c185 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1476,6 +1476,9 @@ skip_vfb:
} else if (!strcmp(buf, "cirrus")) {
b_info->u.hvm.vga.kind
= LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
+ }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);
--
1.7.9.5
Stefano Stabellini
2013-Feb-15 12:27 UTC
Re: [PATCH v9] tools/libxl: Add qxl vga interface support for upstream qemu
On Mon, 11 Feb 2013, fantonifabio@tiscali.it wrote:> From: Fabio Fantoni <fabio.fantoni@heliman.it> > > Usage: > vga="qxl" > > Changes from v8: > - vga=qxl instead of qxl=1 to use it. > - Show an error and exit if vga="qxl" without qemu upstream. > - Other small improvements. > > Required patches: > - Improve videoram setting v5 > - Added vga parameter for hvm domUs > > Signed-off-by: Fabio Fantoni <fabio.fantoni@heliman.it> > Signed-off-by: Zhou Peng <zpengxen@gmail.com>Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>> docs/man/xl.cfg.pod.5 | 10 +++++++++- > tools/libxl/libxl_create.c | 17 +++++++++++++++++ > tools/libxl/libxl_dm.c | 13 +++++++++++++ > tools/libxl/libxl_types.idl | 1 + > tools/libxl/xl_cmdimpl.c | 3 +++ > 5 files changed, 43 insertions(+), 1 deletion(-) > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > index 9862842..a3b3645 100644 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -984,6 +984,9 @@ the amount of video ram is fixed at 4MB which is sufficient > for 1024x768 at 32 bpp and videoram option is currently working > only when using the upstream qemu-xen device-model. > > +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 > @@ -995,9 +998,14 @@ This option is deprecated, use vga="stdvga" instead. > > =item B<vga="STRING"> > > -Selects the emulated video card (stdvga|cirrus). > +Selects the emulated video card (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 > diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c > index cf545ef..67b5e6e 100644 > --- a/tools/libxl/libxl_create.c > +++ b/tools/libxl/libxl_create.c > @@ -197,6 +197,23 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, > case LIBXL_DOMAIN_TYPE_HVM: > if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT) > b_info->shadow_memkb = 0; > + > + if (b_info->u.hvm.vga.kind == LIBXL_VGA_INTERFACE_TYPE_QXL) { > + if (b_info->device_model_version => + LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) { > + 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; > + } > + } else { > + LOG(ERROR,"qemu upstream required for qxl vga"); > + return ERROR_INVAL; > + } > + } > + > if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) > b_info->video_memkb = 8 * 1024; > else if (b_info->video_memkb < 8192){ > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c > index a2c99bd..59fc86a 100644 > --- a/tools/libxl/libxl_dm.c > +++ b/tools/libxl/libxl_dm.c > @@ -181,6 +181,8 @@ static char ** libxl__build_device_model_args_old(libxl__gc *gc, > break; > case LIBXL_VGA_INTERFACE_TYPE_CIRRUS: > break; > + case LIBXL_VGA_INTERFACE_TYPE_QXL: > + break; > } > > if (b_info->u.hvm.boot) { > @@ -440,6 +442,17 @@ static char ** libxl__build_device_model_args_new(libxl__gc *gc, > NULL); > } > break; > + case LIBXL_VGA_INTERFACE_TYPE_QXL: > + /*QXL have 2 ram regions, ram and vram*/ > + flexarray_vappend(dm_args, "-vga", "qxl", NULL); > + if (b_info->video_memkb) { > + flexarray_vappend(dm_args, "-global", > + libxl__sprintf(gc, "qxl-vga.vram_size_mb=%lu", > + (b_info->video_memkb/2/1024)), "-global", > + libxl__sprintf(gc, "qxl-vga.ram_size_mb=%lu", > + (b_info->video_memkb/2/1024)), NULL); > + } > + break; > } > > if (b_info->u.hvm.boot) { > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index acc4bc9..3f90f12 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -130,6 +130,7 @@ libxl_shutdown_reason = Enumeration("shutdown_reason", [ > libxl_vga_interface_type = Enumeration("vga_interface_type", [ > (1, "CIRRUS"), > (2, "STD"), > + (3, "QXL"), > ], init_val = 0) > > # > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index f9101ba..b20c185 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -1476,6 +1476,9 @@ skip_vfb: > } else if (!strcmp(buf, "cirrus")) { > b_info->u.hvm.vga.kind > = LIBXL_VGA_INTERFACE_TYPE_CIRRUS; > + }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); > -- > 1.7.9.5 >
Ian Campbell
2013-Feb-15 13:46 UTC
Re: [PATCH v9] tools/libxl: Add qxl vga interface support for upstream qemu
On Fri, 2013-02-15 at 12:27 +0000, Stefano Stabellini wrote:> On Mon, 11 Feb 2013, fantonifabio@tiscali.it wrote: > > From: Fabio Fantoni <fabio.fantoni@heliman.it> > > > > Usage: > > vga="qxl" > > > > Changes from v8: > > - vga=qxl instead of qxl=1 to use it. > > - Show an error and exit if vga="qxl" without qemu upstream. > > - Other small improvements. > > > > Required patches: > > - Improve videoram setting v5 > > - Added vga parameter for hvm domUs > > > > Signed-off-by: Fabio Fantoni <fabio.fantoni@heliman.it> > > Signed-off-by: Zhou Peng <zpengxen@gmail.com> > > Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>Applied thanks
Fabio Fantoni
2013-Feb-16 12:40 UTC
Re: [PATCH v9] tools/libxl: Add qxl vga interface support for upstream qemu
Il 15/02/2013 14:46, Ian Campbell ha scritto:> On Fri, 2013-02-15 at 12:27 +0000, Stefano Stabellini wrote: >> On Mon, 11 Feb 2013, fantonifabio@tiscali.it wrote: >>> From: Fabio Fantoni <fabio.fantoni@heliman.it> >>> >>> Usage: >>> vga="qxl" >>> >>> Changes from v8: >>> - vga=qxl instead of qxl=1 to use it. >>> - Show an error and exit if vga="qxl" without qemu upstream. >>> - Other small improvements. >>> >>> Required patches: >>> - Improve videoram setting v5 >>> - Added vga parameter for hvm domUs >>> >>> Signed-off-by: Fabio Fantoni <fabio.fantoni@heliman.it> >>> Signed-off-by: Zhou Peng <zpengxen@gmail.com> >> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > Applied thanks > >I do not see this patch in the staging branch, there are problems of code style?
Ian Campbell
2013-Feb-16 13:20 UTC
Re: [PATCH v9] tools/libxl: Add qxl vga interface support for upstream qemu
On Sat, 2013-02-16 at 12:40 +0000, Fabio Fantoni wrote:> Il 15/02/2013 14:46, Ian Campbell ha scritto: > > On Fri, 2013-02-15 at 12:27 +0000, Stefano Stabellini wrote: > >> On Mon, 11 Feb 2013, fantonifabio@tiscali.it wrote: > >>> From: Fabio Fantoni <fabio.fantoni@heliman.it> > >>> > >>> Usage: > >>> vga="qxl" > >>> > >>> Changes from v8: > >>> - vga=qxl instead of qxl=1 to use it. > >>> - Show an error and exit if vga="qxl" without qemu upstream. > >>> - Other small improvements. > >>> > >>> Required patches: > >>> - Improve videoram setting v5 > >>> - Added vga parameter for hvm domUs > >>> > >>> Signed-off-by: Fabio Fantoni <fabio.fantoni@heliman.it> > >>> Signed-off-by: Zhou Peng <zpengxen@gmail.com> > >> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > Applied thanks > > > > > I do not see this patch in the staging branch, there are problems of > code style?I think I just managed to miss actually applying this one in among all the other stuff I applied on Friday. I''ll take another look next week. Ian.
Ian Jackson
2013-Feb-19 18:26 UTC
Re: [PATCH v9] tools/libxl: Add qxl vga interface support for upstream qemu
Ian Campbell writes ("Re: [Xen-devel] [PATCH v9] tools/libxl: Add qxl vga
interface support for upstream qemu"):> On Sat, 2013-02-16 at 12:40 +0000, Fabio Fantoni wrote:
> > I do not see this patch in the staging branch, there are problems of
> > code style?
>
> I think I just managed to miss actually applying this one in among all
> the other stuff I applied on Friday. I''ll take another look next
week.
I see this has an ack from Stefano, but I have made some comments on
the coding style so I think we want a resend with those changes.
Fabio, would you please transfer the ack from Stefano''s email into
your resend ?
Thanks,
Ian.