|
@@ -641,11 +641,11 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
|
|
|
if (rdev->family >= CHIP_CAYMAN) {
|
|
|
struct radeon_fpriv *fpriv;
|
|
|
struct radeon_vm *vm;
|
|
|
- int r;
|
|
|
|
|
|
fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
|
|
|
if (unlikely(!fpriv)) {
|
|
|
- return -ENOMEM;
|
|
|
+ r = -ENOMEM;
|
|
|
+ goto out_suspend;
|
|
|
}
|
|
|
|
|
|
if (rdev->accel_working) {
|
|
@@ -653,14 +653,14 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
|
|
|
r = radeon_vm_init(rdev, vm);
|
|
|
if (r) {
|
|
|
kfree(fpriv);
|
|
|
- return r;
|
|
|
+ goto out_suspend;
|
|
|
}
|
|
|
|
|
|
r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
|
|
|
if (r) {
|
|
|
radeon_vm_fini(rdev, vm);
|
|
|
kfree(fpriv);
|
|
|
- return r;
|
|
|
+ goto out_suspend;
|
|
|
}
|
|
|
|
|
|
/* map the ib pool buffer read only into
|
|
@@ -674,15 +674,16 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
|
|
|
if (r) {
|
|
|
radeon_vm_fini(rdev, vm);
|
|
|
kfree(fpriv);
|
|
|
- return r;
|
|
|
+ goto out_suspend;
|
|
|
}
|
|
|
}
|
|
|
file_priv->driver_priv = fpriv;
|
|
|
}
|
|
|
|
|
|
+out_suspend:
|
|
|
pm_runtime_mark_last_busy(dev->dev);
|
|
|
pm_runtime_put_autosuspend(dev->dev);
|
|
|
- return 0;
|
|
|
+ return r;
|
|
|
}
|
|
|
|
|
|
/**
|