summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorVince Hsu <vinceh@nvidia.com>2018-11-02 03:18:28 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-11-07 13:18:51 -0500
commit6099b07090422bce03f2108f11dc3f8e677a966f (patch)
tree0945fd77b25ab35351c0a29422c5fe275bf9e70b /drivers
parent9d2e50de426ac6362d66f9ccb29a0415322e467f (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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c4
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