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

Re: [Xen-devel] [PATCH v2] libxl: Allow 4 MB of video RAM for Cirrus graphics on traditional QEMU



On Thu, 24 Oct 2013, Rob Hoes wrote:
> VMs using Cirrus graphics have always had 4 MB of video RAM on XenServer, 
> while
> libxl currently does not allow values less than 8 MB.
> 
> Signed-off-by: Rob Hoes <rob.hoes@xxxxxxxxxx>
> Tested-by: Fabio Fantoni <fabio.fantoni@xxxxxxx>

It looks OK


> ----
> v2: Fixed style issues.
> ---
>  docs/man/xl.cfg.pod.5      |   18 ++++++++-------
>  tools/libxl/libxl_create.c |   53 
> ++++++++++++++++++++++++++++++++++----------
>  2 files changed, 51 insertions(+), 20 deletions(-)
> 
> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
> index 278dba1..d2d8921 100644
> --- a/docs/man/xl.cfg.pod.5
> +++ b/docs/man/xl.cfg.pod.5
> @@ -1028,14 +1028,16 @@ in the B<VFB_SPEC_STRING> for configuring virtual 
> frame buffer devices
>  Sets the amount of RAM which the emulated video card will contain,
>  which in turn limits the resolutions and bit depths which will be
>  available.
> -The default amount of video ram for stdvga is 8MB which is sufficient
> -for e.g. 1600x1200 at 32bpp and videoram option is currently working
> -only when using the qemu-xen-traditional device-model.
> -
> -When using the emulated Cirrus graphics card (B<vga="cirrus">)
> -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.
> +
> +When using the qemu-xen-traditional device-model, the default as well as
> +minimum amount of video RAM for stdvga is 8 MB, which is sufficient for e.g.
> +1600x1200 at 32bpp. For the upstream qemu-xen device-model, the default and
> +minimum is 16 MB.
> +
> +When using the emulated Cirrus graphics card (B<vga="cirrus">) and the
> +qemu-xen-traditional device-model, the amount of video RAM is fixed at 4 MB,
> +which is sufficient for 1024x768 at 32 bpp. For the upstream qemu-xen
> +device-model, the default and minimum is 8 MB.
>  
>  =item B<stdvga=BOOLEAN>
>  
> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index 1b320d3..9d793ba 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -216,20 +216,51 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
>          if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT)
>              b_info->shadow_memkb = 0;
>  
> -        if (b_info->u.hvm.vga.kind == LIBXL_VGA_INTERFACE_TYPE_STD &&
> -            b_info->device_model_version ==
> -            LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
> +        if (!b_info->u.hvm.vga.kind)
> +            b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
> +
> +        switch (b_info->device_model_version) {
> +        case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
> +            switch (b_info->u.hvm.vga.kind) {
> +            case LIBXL_VGA_INTERFACE_TYPE_STD:
> +                if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
> +                    b_info->video_memkb = 8 * 1024;
> +                if (b_info->video_memkb < 8 * 1024) {
> +                    LOG(ERROR, "videoram must be at least 8 MB for STDVGA on 
> QEMU_XEN_TRADITIONAL");
> +                    return ERROR_INVAL;
> +                }
> +                break;
> +            case LIBXL_VGA_INTERFACE_TYPE_CIRRUS:
> +            default:
> +                if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
> +                    b_info->video_memkb = 4 * 1024;
> +                if (b_info->video_memkb != 4 * 1024)
> +                    LOG(WARN, "ignoring videoram other than 4 MB for CIRRUS 
> on QEMU_XEN_TRADITIONAL");
> +                break;
> +            }
> +            break;
> +        case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
> +        default:
> +            switch (b_info->u.hvm.vga.kind) {
> +            case LIBXL_VGA_INTERFACE_TYPE_STD:
>                  if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
>                      b_info->video_memkb = 16 * 1024;
> -                else if (b_info->video_memkb < (16 * 1024) ){
> -                    LOG(ERROR, "videoram must be at least 16 mb with 
> stdvga");
> +                if (b_info->video_memkb < 16 * 1024) {
> +                    LOG(ERROR, "videoram must be at least 16 MB for STDVGA 
> on QEMU_XEN");
> +                    return ERROR_INVAL;
> +                }
> +                break;
> +            case LIBXL_VGA_INTERFACE_TYPE_CIRRUS:
> +            default:
> +                if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
> +                    b_info->video_memkb = 8 * 1024;
> +                if (b_info->video_memkb < 8 * 1024) {
> +                    LOG(ERROR, "videoram must be at least 8 MB for CIRRUS on 
> QEMU_XEN");
>                      return ERROR_INVAL;
>                  }
> -        } else if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
> -            b_info->video_memkb = 8 * 1024;
> -        else if (b_info->video_memkb < (8 * 1024) ){
> -            LOG(ERROR,"videoram must be at least 8 mb");
> -            return ERROR_INVAL;
> +                break;
> +            }
> +            break;
>          }
>  
>          if (b_info->u.hvm.timer_mode == LIBXL_TIMER_MODE_DEFAULT)
> @@ -254,8 +285,6 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
>              if (!b_info->u.hvm.boot) return ERROR_NOMEM;
>          }
>  
> -        if (!b_info->u.hvm.vga.kind)
> -            b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
>          libxl_defbool_setdefault(&b_info->u.hvm.vnc.enable, true);
>          if (libxl_defbool_val(b_info->u.hvm.vnc.enable)) {
>              libxl_defbool_setdefault(&b_info->u.hvm.vnc.findunused, true);
> -- 
> 1.7.10.4
> 

_______________________________________________
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®.