[Mesa-dev] [PATCH] winsys/svga: Avoid calling drm getparam for max surface size on older kernels

Brian Paul brian.e.paul at gmail.com
Mon Feb 24 08:31:14 PST 2014


On Mon, Feb 24, 2014 at 2:05 AM, Thomas Hellstrom <thellstrom at vmware.com>wrote:

> This avoids the kernel driver spewing out errors about the param not being
> supported.
>
> Also correct the max surface size used when the kernel does not support the
> query.
>
> Reported-by: Brian Paul <brianp at vmware.com>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
> Reviewed-by: Charmaine Lee <charmainel at vmware.com>
> Cc: "10.1" <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/winsys/svga/drm/vmw_screen_ioctl.c |   15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
> b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
> index b7bedb1..2866a29 100644
> --- a/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
> +++ b/src/gallium/winsys/svga/drm/vmw_screen_ioctl.c
> @@ -762,7 +762,7 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
>     int ret;
>     uint32_t *cap_buffer;
>     drmVersionPtr version;
> -   boolean drm_gb_capable;
> +   boolean have_drm_2_5;
>
>     VMW_FUNC;
>
> @@ -770,7 +770,7 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
>     if (!version)
>        goto out_no_version;
>
> -   drm_gb_capable = version->version_major > 2 ||
> +   have_drm_2_5 = version->version_major > 2 ||
>        (version->version_major == 2 && version->version_minor > 4);
>

How about something like:

have_drm_2_5 = version->version_major * 100 + version->version_minor >= 205?

Not a big deal though.  Thanks for fixing this.

Reviewed-by: Brian Paul <brianp at vmware.com>



>
>     memset(&gp_arg, 0, sizeof(gp_arg));
> @@ -803,7 +803,7 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
>        vws->base.have_gb_objects =
>           !!(gp_arg.value & (uint64_t) SVGA_CAP_GBOBJECTS);
>
> -   if (vws->base.have_gb_objects && !drm_gb_capable)
> +   if (vws->base.have_gb_objects && !have_drm_2_5)
>        goto out_no_3d;
>
>     if (vws->base.have_gb_objects) {
> @@ -839,11 +839,12 @@ vmw_ioctl_init(struct vmw_winsys_screen *vws)
>
>        memset(&gp_arg, 0, sizeof(gp_arg));
>        gp_arg.param = DRM_VMW_PARAM_MAX_SURF_MEMORY;
> -      ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_GET_PARAM,
> -                                &gp_arg, sizeof(gp_arg));
> -      if (ret) {
> +      if (have_drm_2_5)
> +         ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_GET_PARAM,
> +                                   &gp_arg, sizeof(gp_arg));
> +      if (!have_drm_2_5 || ret) {
>           /* Just guess a large enough value, around 800mb. */
> -         vws->ioctl.max_surface_memory = 0x300000000;
> +         vws->ioctl.max_surface_memory = 0x30000000;
>        } else {
>           vws->ioctl.max_surface_memory = gp_arg.value;
>        }
> --
> 1.7.10.4
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140224/33557500/attachment.html>


More information about the mesa-dev mailing list