[PATCH] drm/vmwgfx: Work around drm removal of control nodes

Daniel Vetter daniel at ffwll.ch
Wed Feb 22 19:04:53 UTC 2017


On Tue, Feb 21, 2017 at 11:42 AM, Thomas Hellstrom
<thellstrom at vmware.com> wrote:
> vmware tools has a daemon that gets layout information from the GUI and
> forwards it to DRM so that the modesetting code can set preferred connector
> locations and modes. This daemon was using control nodes but since control
> nodes were just removed, make it possible for the daemon to use render- or
> primary nodes instead. This is a bit ugly but will allow drm to proceed with
> removal of the mostly unused control-node code and allow vmware to proceed
> with fixing up automatic layout settings for gnome-shell/wayland.
>
> We bump minor to inform user-space about the api change.
>
> Cc: <stable at vger.kernel.org>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>

Seems reasonable. I guess with hindsight we probably should have added
a virtual_x/y hint, similar to the hotpsot hinting we do for cursors.
But since vmwgfx is the only virtual gpu that seems to do multi-screen
that need was never all that apparent. I think we should fix that
if/when vmwgfx switches over to atomic, atomic is super easy to
extend. Also, with this patch I think we can restore backwards compat
by registering the render node as controlD (but only for vmwgfx, we'll
keep the fake symlink for everyone else). I'm travelling still till
the end of this week, and my brain is wrecked, but will get to that as
soon as I'm back next week. I'll also reference the link in that
commit.

Cheers, Daniel

> ---
>  drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 ++++++++++-
>  drivers/gpu/drm/vmwgfx/vmwgfx_drv.h |  4 ++--
>  2 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index 541a588..d08f269 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -199,9 +199,14 @@ static const struct drm_ioctl_desc vmw_ioctls[] = {
>         VMW_IOCTL_DEF(VMW_PRESENT_READBACK,
>                       vmw_present_readback_ioctl,
>                       DRM_MASTER | DRM_AUTH),
> +       /*
> +        * The permissions of the below ioctl are overridden in
> +        * vmw_generic_ioctl(). We require either
> +        * DRM_MASTER or capable(CAP_SYS_ADMIN).
> +        */
>         VMW_IOCTL_DEF(VMW_UPDATE_LAYOUT,
>                       vmw_kms_update_layout_ioctl,
> -                     DRM_MASTER | DRM_CONTROL_ALLOW),
> +                     DRM_RENDER_ALLOW),
>         VMW_IOCTL_DEF(VMW_CREATE_SHADER,
>                       vmw_shader_define_ioctl,
>                       DRM_AUTH | DRM_RENDER_ALLOW),
> @@ -1123,6 +1128,10 @@ static long vmw_generic_ioctl(struct file *filp, unsigned int cmd,
>
>                         return (long) vmw_execbuf_ioctl(dev, arg, file_priv,
>                                                         _IOC_SIZE(cmd));
> +               } else if (nr == DRM_COMMAND_BASE + DRM_VMW_UPDATE_LAYOUT) {
> +                       if (!drm_is_current_master(file_priv) &&
> +                           !capable(CAP_SYS_ADMIN))
> +                               return -EACCES;
>                 }
>
>                 if (unlikely(ioctl->cmd != cmd))
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> index 1e59a48..59ff419 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> @@ -41,9 +41,9 @@
>  #include <drm/ttm/ttm_module.h>
>  #include "vmwgfx_fence.h"
>
> -#define VMWGFX_DRIVER_DATE "20160210"
> +#define VMWGFX_DRIVER_DATE "20170221"
>  #define VMWGFX_DRIVER_MAJOR 2
> -#define VMWGFX_DRIVER_MINOR 11
> +#define VMWGFX_DRIVER_MINOR 12
>  #define VMWGFX_DRIVER_PATCHLEVEL 0
>  #define VMWGFX_FILE_PAGE_OFFSET 0x00100000
>  #define VMWGFX_FIFO_STATIC_SIZE (1024*1024)
> --
> 2.9.3
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list