|
@@ -542,12 +542,16 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
|
|
|
return r;
|
|
|
|
|
|
fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
|
|
|
- if (unlikely(!fpriv))
|
|
|
- return -ENOMEM;
|
|
|
+ if (unlikely(!fpriv)) {
|
|
|
+ r = -ENOMEM;
|
|
|
+ goto out_suspend;
|
|
|
+ }
|
|
|
|
|
|
r = amdgpu_vm_init(adev, &fpriv->vm);
|
|
|
- if (r)
|
|
|
- goto error_free;
|
|
|
+ if (r) {
|
|
|
+ kfree(fpriv);
|
|
|
+ goto out_suspend;
|
|
|
+ }
|
|
|
|
|
|
mutex_init(&fpriv->bo_list_lock);
|
|
|
idr_init(&fpriv->bo_list_handles);
|
|
@@ -556,12 +560,9 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
|
|
|
|
|
|
file_priv->driver_priv = fpriv;
|
|
|
|
|
|
+out_suspend:
|
|
|
pm_runtime_mark_last_busy(dev->dev);
|
|
|
pm_runtime_put_autosuspend(dev->dev);
|
|
|
- return 0;
|
|
|
-
|
|
|
-error_free:
|
|
|
- kfree(fpriv);
|
|
|
|
|
|
return r;
|
|
|
}
|