Skip to content

Commit 73a395c

Browse files
Pavel Machek (CIP)thierryreding
authored andcommitted
drm/tegra: sor: Do not leak runtime PM reference
It's theoretically possible for the runtime PM reference to leak if the code fails anywhere between the pm_runtime_resume_and_get() and pm_runtime_put() calls, so make sure to release the runtime PM reference in that case. Practically this will never happen because none of the functions will fail on Tegra, but it's better for the code to be pedantic in case these assumptions will ever become wrong. Signed-off-by: Pavel Machek (CIP) <[email protected]> [[email protected]: add commit message] Signed-off-by: Thierry Reding <[email protected]>
1 parent 6efb943 commit 73a395c

File tree

1 file changed

+10
-4
lines changed
  • drivers/gpu/drm/tegra

1 file changed

+10
-4
lines changed

drivers/gpu/drm/tegra/sor.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3125,21 +3125,21 @@ static int tegra_sor_init(struct host1x_client *client)
31253125
if (err < 0) {
31263126
dev_err(sor->dev, "failed to acquire SOR reset: %d\n",
31273127
err);
3128-
return err;
3128+
goto rpm_put;
31293129
}
31303130

31313131
err = reset_control_assert(sor->rst);
31323132
if (err < 0) {
31333133
dev_err(sor->dev, "failed to assert SOR reset: %d\n",
31343134
err);
3135-
return err;
3135+
goto rpm_put;
31363136
}
31373137
}
31383138

31393139
err = clk_prepare_enable(sor->clk);
31403140
if (err < 0) {
31413141
dev_err(sor->dev, "failed to enable clock: %d\n", err);
3142-
return err;
3142+
goto rpm_put;
31433143
}
31443144

31453145
usleep_range(1000, 3000);
@@ -3150,7 +3150,7 @@ static int tegra_sor_init(struct host1x_client *client)
31503150
dev_err(sor->dev, "failed to deassert SOR reset: %d\n",
31513151
err);
31523152
clk_disable_unprepare(sor->clk);
3153-
return err;
3153+
goto rpm_put;
31543154
}
31553155

31563156
reset_control_release(sor->rst);
@@ -3171,6 +3171,12 @@ static int tegra_sor_init(struct host1x_client *client)
31713171
}
31723172

31733173
return 0;
3174+
3175+
rpm_put:
3176+
if (sor->rst)
3177+
pm_runtime_put(sor->dev);
3178+
3179+
return err;
31743180
}
31753181

31763182
static int tegra_sor_exit(struct host1x_client *client)

0 commit comments

Comments
 (0)