|
@@ -740,9 +740,17 @@ static void vmw_postclose(struct drm_device *dev,
|
|
|
struct vmw_fpriv *vmw_fp;
|
|
|
|
|
|
vmw_fp = vmw_fpriv(file_priv);
|
|
|
- ttm_object_file_release(&vmw_fp->tfile);
|
|
|
- if (vmw_fp->locked_master)
|
|
|
+
|
|
|
+ if (vmw_fp->locked_master) {
|
|
|
+ struct vmw_master *vmaster =
|
|
|
+ vmw_master(vmw_fp->locked_master);
|
|
|
+
|
|
|
+ ttm_lock_set_kill(&vmaster->lock, true, SIGTERM);
|
|
|
+ ttm_vt_unlock(&vmaster->lock);
|
|
|
drm_master_put(&vmw_fp->locked_master);
|
|
|
+ }
|
|
|
+
|
|
|
+ ttm_object_file_release(&vmw_fp->tfile);
|
|
|
kfree(vmw_fp);
|
|
|
}
|
|
|
|
|
@@ -925,14 +933,13 @@ static void vmw_master_drop(struct drm_device *dev,
|
|
|
|
|
|
vmw_fp->locked_master = drm_master_get(file_priv->master);
|
|
|
ret = ttm_vt_lock(&vmaster->lock, false, vmw_fp->tfile);
|
|
|
- vmw_execbuf_release_pinned_bo(dev_priv);
|
|
|
-
|
|
|
if (unlikely((ret != 0))) {
|
|
|
DRM_ERROR("Unable to lock TTM at VT switch.\n");
|
|
|
drm_master_put(&vmw_fp->locked_master);
|
|
|
}
|
|
|
|
|
|
- ttm_lock_set_kill(&vmaster->lock, true, SIGTERM);
|
|
|
+ ttm_lock_set_kill(&vmaster->lock, false, SIGTERM);
|
|
|
+ vmw_execbuf_release_pinned_bo(dev_priv);
|
|
|
|
|
|
if (!dev_priv->enable_fb) {
|
|
|
ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM);
|