From 8c8d05aec755ee509e17bd495f424b6ca25f7c9f Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Mon, 18 May 2015 16:12:05 -0700 Subject: gpu: nvgpu: Infinite wait for fixed alloc unmap In non-silicon wait infinitely for all jobs to complete before unmapping a fixed allocation. Bug 200078514 Change-Id: I9196afb1d3c5f0c999113a4a17ada2989ac55707 Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/744067 (cherry picked from commit 6ccac11b4dd1a4eaf9c914fd567cdf7922184e28) Reviewed-on: http://git-master/r/753284 Reviewed-by: Automatic_Commit_Validation_User --- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a') diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index e3ec3f10..f5ce886a 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -810,7 +810,7 @@ void gk20a_vm_put_buffers(struct vm_gk20a *vm, static void gk20a_vm_unmap_user(struct vm_gk20a *vm, u64 offset) { struct device *d = dev_from_vm(vm); - int retries; + int retries = 1000; struct mapped_buffer_node *mapped_buffer; mutex_lock(&vm->update_gmmu_lock); @@ -825,17 +825,13 @@ static void gk20a_vm_unmap_user(struct vm_gk20a *vm, u64 offset) if (mapped_buffer->flags & NVGPU_AS_MAP_BUFFER_FLAGS_FIXED_OFFSET) { mutex_unlock(&vm->update_gmmu_lock); - if (tegra_platform_is_silicon()) - retries = 1000; - else - retries = 1000000; - while (retries) { + while (retries >= 0 || !tegra_platform_is_silicon()) { if (atomic_read(&mapped_buffer->ref.refcount) == 1) break; retries--; - udelay(50); + udelay(5); } - if (!retries) + if (retries < 0 && tegra_platform_is_silicon()) gk20a_err(d, "sync-unmap failed on 0x%llx", offset); mutex_lock(&vm->update_gmmu_lock); -- cgit v1.2.2