summaryrefslogtreecommitdiff
path: root/drivers/gpu/host1x
diff options
context:
space:
mode:
authorDmitry Osipenko <digetx@gmail.com>2017-06-15 02:18:33 +0300
committerThierry Reding <treding@nvidia.com>2017-06-15 14:21:46 +0200
commite5855aa3e681bc417165604212c061e1c4b7cbda (patch)
tree8cabb11f1870154f10d93031a37d5cf743e88a9f /drivers/gpu/host1x
parent3833d16f1677e19098eb8cc0f0a54f6e209406f4 (diff)
gpu: host1x: Correct host1x_job_pin() error handling
In case of relocations / waitchecks patching failure the jobs pins stay referenced till DRM file get closed, wasting memory. Add the missed unpinning. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Reviewed-by: Erik Faye-Lund <kusmabite@gmail.com> Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
Diffstat (limited to 'drivers/gpu/host1x')
-rw-r--r--drivers/gpu/host1x/job.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c
index d9933828fe87..14f3f957ffab 100644
--- a/drivers/gpu/host1x/job.c
+++ b/drivers/gpu/host1x/job.c
@@ -592,22 +592,20 @@ int host1x_job_pin(struct host1x_job *job, struct device *dev)
err = do_relocs(job, g->bo);
if (err)
- break;
+ goto out;
err = do_waitchks(job, host, g->bo);
if (err)
- break;
+ goto out;
}
- if (IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL) && !err) {
- err = copy_gathers(job, dev);
- if (err) {
- host1x_job_unpin(job);
- return err;
- }
- }
+ if (!IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL))
+ goto out;
+ err = copy_gathers(job, dev);
out:
+ if (err)
+ host1x_job_unpin(job);
wmb();
return err;