From caed43e0a208d87dd2c1788a74897072422b89a8 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Thu, 7 Apr 2016 18:20:50 +0530 Subject: gpu: nvgpu: return from worker if gpu is not up During GPU shutdown path, it is possible that we shut down the GPU while worker thread is still running gk20a_channel_update() Hence before accessing gp_put/get, check if GPU is up or not Bug 200166139 Change-Id: Iba3ec173041a84527c4700a93f20564a842cfb01 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/935193 (cherry picked from commit c81ea5fe383c44e872754b363968af57d84225ac) Reviewed-on: http://git-master/r/1121917 Reviewed-by: Seshendra Gadagottu Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index a7f8005b..d94e12a2 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -1871,6 +1871,11 @@ static void gk20a_channel_clean_up_jobs(struct work_struct *work) if (!c) return; + if (!c->g->power_on) { /* shutdown case */ + gk20a_channel_put(c); + return; + } + vm = c->vm; g = c->g; platform = gk20a_get_platform(g->dev); @@ -1951,6 +1956,11 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed) if (!c) return; + if (!c->g->power_on) { /* shutdown case */ + gk20a_channel_put(c); + return; + } + update_gp_get(c->g, c); wake_up(&c->submit_wq); -- cgit v1.2.2