Эх сурвалжийг харах

drm/amdgpu: handle runtime pm correctly in amdgpu_driver_open_kms

Need to fix the error paths.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Alex Deucher 9 жил өмнө
parent
commit
dc08267ac4

+ 9 - 8
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

@@ -542,12 +542,16 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
 		return r;
 		return r;
 
 
 	fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
 	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);
 	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);
 	mutex_init(&fpriv->bo_list_lock);
 	idr_init(&fpriv->bo_list_handles);
 	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;
 	file_priv->driver_priv = fpriv;
 
 
+out_suspend:
 	pm_runtime_mark_last_busy(dev->dev);
 	pm_runtime_mark_last_busy(dev->dev);
 	pm_runtime_put_autosuspend(dev->dev);
 	pm_runtime_put_autosuspend(dev->dev);
-	return 0;
-
-error_free:
-	kfree(fpriv);
 
 
 	return r;
 	return r;
 }
 }