浏览代码

drm/vc4: Fix refcounting of runtime PM get if it errors out.

We were returning without decrementing if the error happened, meaning
that at the next submit we wouldn't try to bring up the power domain.

Signed-off-by: Eric Anholt <eric@anholt.net>
Link: http://patchwork.freedesktop.org/patch/msgid/20170417162603.12726-1-eric@anholt.net
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Eric Anholt 8 年之前
父节点
当前提交
925d05e1f8
共有 1 个文件被更改,包括 8 次插入5 次删除
  1. 8 5
      drivers/gpu/drm/vc4/vc4_gem.c

+ 8 - 5
drivers/gpu/drm/vc4/vc4_gem.c

@@ -1010,13 +1010,16 @@ vc4_submit_cl_ioctl(struct drm_device *dev, void *data,
 	}
 	}
 
 
 	mutex_lock(&vc4->power_lock);
 	mutex_lock(&vc4->power_lock);
-	if (vc4->power_refcount++ == 0)
+	if (vc4->power_refcount++ == 0) {
 		ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev);
 		ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev);
-	mutex_unlock(&vc4->power_lock);
-	if (ret < 0) {
-		kfree(exec);
-		return ret;
+		if (ret < 0) {
+			mutex_unlock(&vc4->power_lock);
+			vc4->power_refcount--;
+			kfree(exec);
+			return ret;
+		}
 	}
 	}
+	mutex_unlock(&vc4->power_lock);
 
 
 	exec->args = args;
 	exec->args = args;
 	INIT_LIST_HEAD(&exec->unref_list);
 	INIT_LIST_HEAD(&exec->unref_list);