diff options
author | Vince Hsu <vinceh@nvidia.com> | 2018-11-02 03:18:28 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-11-07 13:18:51 -0500 |
commit | 6099b07090422bce03f2108f11dc3f8e677a966f (patch) | |
tree | 0945fd77b25ab35351c0a29422c5fe275bf9e70b | |
parent | 9d2e50de426ac6362d66f9ccb29a0415322e467f (diff) |
gpu: nvgpu: fix deadlock when ACR boot fails
The tpc_pg_lock is not released properly when ACR fails to boot, so
the subsequent runtime PM resume operation will block. And it in
turn also causes shutdown block due to pending runtime PM operations.
Bug 200462464
Change-Id: Ia28ac11e8a7bbd826cf5f90ba8f90b29d2a55baa
Signed-off-by: Vince Hsu <vinceh@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1941670
(cherry picked from commit 0bda191d7b9c01a22b91feb523134b845ee7523b)
Reviewed-on: https://git-master.nvidia.com/r/1942949
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Siddardha Naraharisetti <siddardhan@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index 9ee5f282..7ae1febc 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c | |||
@@ -313,6 +313,7 @@ int gk20a_finalize_poweron(struct gk20a *g) | |||
313 | err = g->acr.bootstrap_hs_acr(g, &g->acr, &g->acr.acr); | 313 | err = g->acr.bootstrap_hs_acr(g, &g->acr, &g->acr.acr); |
314 | if (err != 0) { | 314 | if (err != 0) { |
315 | nvgpu_err(g, "ACR bootstrap failed"); | 315 | nvgpu_err(g, "ACR bootstrap failed"); |
316 | nvgpu_mutex_release(&g->tpc_pg_lock); | ||
316 | goto done; | 317 | goto done; |
317 | } | 318 | } |
318 | } | 319 | } |
@@ -321,7 +322,8 @@ int gk20a_finalize_poweron(struct gk20a *g) | |||
321 | err = nvgpu_init_sec2_support(g); | 322 | err = nvgpu_init_sec2_support(g); |
322 | if (err != 0) { | 323 | if (err != 0) { |
323 | nvgpu_err(g, "failed to init sec2"); | 324 | nvgpu_err(g, "failed to init sec2"); |
324 | goto done; | 325 | nvgpu_mutex_release(&g->tpc_pg_lock); |
326 | goto done; | ||
325 | } | 327 | } |
326 | } | 328 | } |
327 | 329 | ||