[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v6] tools/libxl: Add qxl vga interface support for upstream-qemu-xen.



On Fri, 18 Jan 2013, Fabio Fantoni wrote:
> Il 17/01/2013 18:24, Stefano Stabellini ha scritto:
> > On Thu, 17 Jan 2013, Fabio Fantoni wrote:
> > > tools/libxl: Add qxl vga interface support for upstream-qemu-xen.
> > > 
> > > Usage:
> > >    qxl=1|0
> > > 
> > > Changes from v5 of Zhou Peng:
> > > - Some improvements and make videoram configurable.
> > > 
> > > This patch is based on staging branch updated today
> > > with also this patch applied:
> > > tools/libxl: Improve videoram setting
> > > 
> > > Signed-off-by: Fabio Fantoni <fabio.fantoni@xxxxxxxxxx>
> > Thanks for the patch!
> > You should add Zhou Peng's signed-off-by because the code originally
> > comes from him
> > 
> > >   docs/man/xl.cfg.pod.5       |   11 +++++++++++
> > >   tools/libxl/libxl_create.c  |   12 ++++++++++++
> > >   tools/libxl/libxl_dm.c      |   15 +++++++++++++++
> > >   tools/libxl/libxl_types.idl |    1 +
> > >   tools/libxl/xl_cmdimpl.c    |    4 ++++
> > >   5 files changed, 43 insertions(+)
> > > 
> > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
> > > index 9c5cdcd..a0f0dc3 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
> > > @@ -992,6 +995,14 @@ a Cirrus Logic GD5446 VGA card. If your guest
> > > supports
> > > VBE 2.0 or
> > >   later (e.g. Windows XP onwards) then you should enable this.
> > >   stdvga supports more video ram and bigger resolutions than Cirrus.
> > > 
> > > +=item B<qxl=BOOLEAN>
> > > +
> > > +Select a QXL VGA card as the emulated graphics device.
> > > +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 802209e..cdcf263 100644
> > > --- a/tools/libxl/libxl_create.c
> > > +++ b/tools/libxl/libxl_create.c
> > > @@ -197,6 +197,18 @@ 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->device_model_version ==
> > > LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN
> > > +            && b_info->u.hvm.vga.kind == 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)) {
> > > +                LIBXL__LOG(CTX, LIBXL__LOG_ERROR,
> > > +                    "128 Mib videoram is the minimum for qxl default");
> > > +                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 d719130..5cecaae 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) {
> > > @@ -437,6 +439,19 @@ static char **
> > > libxl__build_device_model_args_new(libxl__gc *gc,
> > >                   NULL);
> > >               }
> > >               break;
> > > +        case LIBXL_VGA_INTERFACE_TYPE_QXL:
> > > +            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=%d",
> > > +                libxl__sizekb_to_mb(b_info->video_memkb/2)),
> > > +                NULL);
> > > +                flexarray_vappend(dm_args, "-global",
> > > +                libxl__sprintf(gc, "qxl-vga.ram_size_mb=%d",
> > > +                libxl__sizekb_to_mb(b_info->video_memkb/2)),
> > > +                NULL);
> > > +            }
> > > +            break;
> > why twice?
> > 
> > 
> > >           }
> > > 
> > >           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 e964bf1..80c36e4 100644
> > > --- a/tools/libxl/xl_cmdimpl.c
> > > +++ b/tools/libxl/xl_cmdimpl.c
> > > @@ -1473,6 +1473,10 @@ skip_vfb:
> > >               b_info->u.hvm.vga.kind = l ? LIBXL_VGA_INTERFACE_TYPE_STD :
> > > LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
> > > 
> > > +        if (!xlu_cfg_get_long(config, "qxl", &l, 0))
> > > +            b_info->u.hvm.vga.kind = l ? LIBXL_VGA_INTERFACE_TYPE_QXL :
> > > + LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
> > > +
> > >           xlu_cfg_get_defbool(config, "vnc", &b_info->u.hvm.vnc.enable,
> > > 0);
> > >           xlu_cfg_replace_string (config, "vnclisten",
> > >                                   &b_info->u.hvm.vnc.listen, 0);
> > this is going to overwrite the previous stdvga setting if:
> > 
> > stdvga=1
> > qxl=0
> > 
> > 
> > -----
> > Nessun virus nel messaggio.
> > Controllato da AVG - www.avg.com
> > Versione: 2013.0.2890 / Database dei virus: 2638/6037 -  Data di rilascio:
> > 16/01/2013
> > 
> > 
> About Zhou Peng's signoff, I have seen patch on site without mail complete,
> now I found is address on old mail and I'll add it on new version of patch.
> 
> About twice global parameter for videoram should be correct because qxl has 2
> ram regions.
> In this thread there is a post that probably explain all good:
> http://en.usenet.digipedia.org/thread/11782/83741/
> > The qxl device has two large memory regions:
> > 
> > Region #1 is called "ram" and is mapped to PCI bar 0.  This is again
> > splitted into three parts:  The framebuffer at the start, the command
> > rings at the end, and storage area for spice rendering commands and
> > image data inbetween.
> > 
> > Region #2 is called "vram".  This is storage for images, called
> > "surfaces" in spice.  Surfaces can be both source and target for spice
> > rendering operations.  X11 can store offscreen pixmaps there for
> > example.  Once qxl gets 3D support surfaces can also be used for textures.
> For other details read complete post on link before.

OK, it seems sensible.


> About qxl and stdvga setting I'll try to found solution for all combinations.
> For now I don't know what can I do if both are enabled.

Don't worry about that: it is clearly a configuration error. But
stdvga=1 and qxl=0 is not a configuration error so it has to work
properly

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.