gpu: nvgpu: skip taking g->busy_lock in gk20a_idle

We use g->busy_lock in gk20a_do_idle() to prevent submitting
more jobs to h/w and to wait for currently running jobs to
finish

But requesting this lock in gk20a_idle() prevents decrementing
runtime counter and hence gk20a_do_idle() can timeout with
below prints
[  148.904739] gk20a 17000000.gp10b: Timeout detected @
gk20a_do_idle+0x30/0x38
[  148.912185] gk20a 17000000.gp10b: __gk20a_do_idle: failed to idle -
refcount 4 != 1

Hence skip requesting this lock in gk20a_idle()

Bug 200294536

Change-Id: I060075fdee1b68e1b5fa11baa44a3f5ce4917d94
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/1480777
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
Deepak Nibade
2017-05-12 16:28:47 +05:30
committed by mobile promotions
parent 3bc022cb38
commit 47cd4860f0

View File

@@ -1908,12 +1908,11 @@ void gk20a_idle(struct gk20a *g)
struct device *dev; struct device *dev;
atomic_dec(&g->usage_count); atomic_dec(&g->usage_count);
down_read(&g->busy_lock);
dev = g->dev; dev = g->dev;
if (!(dev && gk20a_can_busy(g))) if (!(dev && gk20a_can_busy(g)))
goto fail; return;
if (pm_runtime_enabled(dev)) { if (pm_runtime_enabled(dev)) {
#ifdef CONFIG_PM #ifdef CONFIG_PM
@@ -1927,8 +1926,6 @@ void gk20a_idle(struct gk20a *g)
} else { } else {
gk20a_scale_notify_idle(dev); gk20a_scale_notify_idle(dev);
} }
fail:
up_read(&g->busy_lock);
} }
void gk20a_disable(struct gk20a *g, u32 units) void gk20a_disable(struct gk20a *g, u32 units)