diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c')
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c | 38 | 
1 files changed, 15 insertions, 23 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c index d9fbbe191071..c509d40c4897 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c @@ -131,7 +131,7 @@ int vmw_present_ioctl(struct drm_device *dev, void *data,  	struct vmw_master *vmaster = vmw_master(file_priv->master);  	struct drm_vmw_rect __user *clips_ptr;  	struct drm_vmw_rect *clips = NULL; -	struct drm_mode_object *obj; +	struct drm_framebuffer *fb;  	struct vmw_framebuffer *vfb;  	struct vmw_resource *res;  	uint32_t num_clips; @@ -163,19 +163,15 @@ int vmw_present_ioctl(struct drm_device *dev, void *data,  		goto out_no_copy;  	} -	ret = mutex_lock_interruptible(&dev->mode_config.mutex); -	if (unlikely(ret != 0)) { -		ret = -ERESTARTSYS; -		goto out_no_mode_mutex; -	} +	drm_modeset_lock_all(dev); -	obj = drm_mode_object_find(dev, arg->fb_id, DRM_MODE_OBJECT_FB); -	if (!obj) { +	fb = drm_framebuffer_lookup(dev, arg->fb_id); +	if (!fb) {  		DRM_ERROR("Invalid framebuffer id.\n");  		ret = -EINVAL;  		goto out_no_fb;  	} -	vfb = vmw_framebuffer_to_vfb(obj_to_fb(obj)); +	vfb = vmw_framebuffer_to_vfb(fb);  	ret = ttm_read_lock(&vmaster->lock, true);  	if (unlikely(ret != 0)) @@ -199,9 +195,9 @@ int vmw_present_ioctl(struct drm_device *dev, void *data,  out_no_surface:  	ttm_read_unlock(&vmaster->lock);  out_no_ttm_lock: +	drm_framebuffer_unreference(fb);  out_no_fb: -	mutex_unlock(&dev->mode_config.mutex); -out_no_mode_mutex: +	drm_modeset_unlock_all(dev);  out_no_copy:  	kfree(clips);  out_clips: @@ -220,7 +216,7 @@ int vmw_present_readback_ioctl(struct drm_device *dev, void *data,  	struct vmw_master *vmaster = vmw_master(file_priv->master);  	struct drm_vmw_rect __user *clips_ptr;  	struct drm_vmw_rect *clips = NULL; -	struct drm_mode_object *obj; +	struct drm_framebuffer *fb;  	struct vmw_framebuffer *vfb;  	uint32_t num_clips;  	int ret; @@ -251,24 +247,20 @@ int vmw_present_readback_ioctl(struct drm_device *dev, void *data,  		goto out_no_copy;  	} -	ret = mutex_lock_interruptible(&dev->mode_config.mutex); -	if (unlikely(ret != 0)) { -		ret = -ERESTARTSYS; -		goto out_no_mode_mutex; -	} +	drm_modeset_lock_all(dev); -	obj = drm_mode_object_find(dev, arg->fb_id, DRM_MODE_OBJECT_FB); -	if (!obj) { +	fb = drm_framebuffer_lookup(dev, arg->fb_id); +	if (!fb) {  		DRM_ERROR("Invalid framebuffer id.\n");  		ret = -EINVAL;  		goto out_no_fb;  	} -	vfb = vmw_framebuffer_to_vfb(obj_to_fb(obj)); +	vfb = vmw_framebuffer_to_vfb(fb);  	if (!vfb->dmabuf) {  		DRM_ERROR("Framebuffer not dmabuf backed.\n");  		ret = -EINVAL; -		goto out_no_fb; +		goto out_no_ttm_lock;  	}  	ret = ttm_read_lock(&vmaster->lock, true); @@ -281,9 +273,9 @@ int vmw_present_readback_ioctl(struct drm_device *dev, void *data,  	ttm_read_unlock(&vmaster->lock);  out_no_ttm_lock: +	drm_framebuffer_unreference(fb);  out_no_fb: -	mutex_unlock(&dev->mode_config.mutex); -out_no_mode_mutex: +	drm_modeset_unlock_all(dev);  out_no_copy:  	kfree(clips);  out_clips:  |