Reviewed-by: Sinclair Yeh <syeh@xxxxxxxxxx> On Tue, Feb 21, 2017 at 05:42:27PM +0700, Thomas Hellstrom 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@xxxxxxxxxxxxxxx> > Signed-off-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx> > --- > 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 >