summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2017-04-17 09:26:03 -0700
committerEric Anholt <eric@anholt.net>2017-04-18 12:31:14 -0700
commit925d05e1f825db9490da33afe35bd5383d301e97 (patch)
tree0e74238e3c3cb5d55bc8f622bbbd5ee442e05fea
parent4f6e3d66ac522dec9733d433ad00e8e77747c372 (diff)
downloadlinux-stable-925d05e1f825db9490da33afe35bd5383d301e97.tar.gz
linux-stable-925d05e1f825db9490da33afe35bd5383d301e97.tar.bz2
linux-stable-925d05e1f825db9490da33afe35bd5383d301e97.zip
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>
-rw-r--r--drivers/gpu/drm/vc4/vc4_gem.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
index a1a01044263c..12fb70ef3170 100644
--- a/drivers/gpu/drm/vc4/vc4_gem.c
+++ b/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);
- if (vc4->power_refcount++ == 0)
+ if (vc4->power_refcount++ == 0) {
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;
INIT_LIST_HEAD(&exec->unref_list);