[3/3] drm: Reject DRI1 hw lock ioctl functions for kms drivers
diff mbox

Message ID 1435052228-29710-3-git-send-email-daniel.vetter@ffwll.ch
State New
Headers show

Commit Message

Daniel Vetter June 23, 2015, 9:37 a.m. UTC
I've done some extensive history digging across libdrm, mesa and
xf86-video-{intel,nouveau,ati}. The only potential user of this with
kms drivers I could find was ttmtest, which once used drmGetLock
still. But that mistake was quickly fixed up. Even the intel xvmc
library (which otherwise was really good with using dri1 stuff in kms
mode) managed to never take the hw lock for dri2 (and hence kms).

Hence it should be save to unconditionally disallow this.

Cc: Peter Antoine <peter.antoine@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/drm_lock.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Peter Antoine June 23, 2015, 1:16 p.m. UTC | #1
On Tue, 2015-06-23 at 11:37 +0200, Daniel Vetter wrote:
> I've done some extensive history digging across libdrm, mesa and

> xf86-video-{intel,nouveau,ati}. The only potential user of this with

> kms drivers I could find was ttmtest, which once used drmGetLock

> still. But that mistake was quickly fixed up. Even the intel xvmc

> library (which otherwise was really good with using dri1 stuff in kms

> mode) managed to never take the hw lock for dri2 (and hence kms).

> 

> Hence it should be save to unconditionally disallow this.

> 

> Cc: Peter Antoine <peter.antoine@intel.com>

> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

> ---

>  drivers/gpu/drm/drm_lock.c | 6 ++++++

>  1 file changed, 6 insertions(+)

> 

> diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c

> index f861361a635e..4924d381b664 100644

> --- a/drivers/gpu/drm/drm_lock.c

> +++ b/drivers/gpu/drm/drm_lock.c

> @@ -61,6 +61,9 @@ int drm_legacy_lock(struct drm_device *dev, void *data,

>  	struct drm_master *master = file_priv->master;

>  	int ret = 0;

>  

> +	if (drm_core_check_feature(dev, DRIVER_MODESET))

> +		return -EINVAL;

> +

>  	++file_priv->lock_count;

>  

>  	if (lock->context == DRM_KERNEL_CONTEXT) {

> @@ -153,6 +156,9 @@ int drm_legacy_unlock(struct drm_device *dev, void *data, struct drm_file *file_

>  	struct drm_lock *lock = data;

>  	struct drm_master *master = file_priv->master;

>  

> +	if (drm_core_check_feature(dev, DRIVER_MODESET))

> +		return -EINVAL;

> +

>  	if (lock->context == DRM_KERNEL_CONTEXT) {

>  		DRM_ERROR("Process %d using kernel context %d\n",

>  			  task_pid_nr(current), lock->context);


Reviewed-by: Peter Antoine <peter.antoine@intel.com>

Patch
diff mbox

diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c
index f861361a635e..4924d381b664 100644
--- a/drivers/gpu/drm/drm_lock.c
+++ b/drivers/gpu/drm/drm_lock.c
@@ -61,6 +61,9 @@  int drm_legacy_lock(struct drm_device *dev, void *data,
 	struct drm_master *master = file_priv->master;
 	int ret = 0;
 
+	if (drm_core_check_feature(dev, DRIVER_MODESET))
+		return -EINVAL;
+
 	++file_priv->lock_count;
 
 	if (lock->context == DRM_KERNEL_CONTEXT) {
@@ -153,6 +156,9 @@  int drm_legacy_unlock(struct drm_device *dev, void *data, struct drm_file *file_
 	struct drm_lock *lock = data;
 	struct drm_master *master = file_priv->master;
 
+	if (drm_core_check_feature(dev, DRIVER_MODESET))
+		return -EINVAL;
+
 	if (lock->context == DRM_KERNEL_CONTEXT) {
 		DRM_ERROR("Process %d using kernel context %d\n",
 			  task_pid_nr(current), lock->context);