From 321327b5066bce1b8a7ea97971c3db86bec11d75 Mon Sep 17 00:00:00 2001 From: Loren Huang Date: Thu, 27 Feb 2014 15:44:49 +0800 Subject: [PATCH] ENGR00301095 gpu:gpu hang when dma memory is used up When dma zone memory used up, gckOS_AllocateNonPagedMemory() will try to free non paged memory cache and allocate again. Such operation will cause twice memory mutex request and cause gpu driver hang. The solution is free the memory mutex at first before trying to free non paged memory cache. Date: Feb 27, 2014 Signed-off-by: Loren Huang Acked-by: Shawn Guo (cherry picked from commit 79ed8edd23f990f6c1429154c2ee773c83bfd72e) --- drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c index 273d1173aac7..45c42a4908ea 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c @@ -2022,8 +2022,12 @@ gckOS_AllocateNonPagedMemory( #if gcdUSE_NON_PAGED_MEMORY_CACHE if(addr == gcvNULL) { + MEMORY_UNLOCK(Os); + locked = gcvFALSE; /*Free all cache and try again*/ _FreeAllNonPagedMemoryCache(Os); + MEMORY_LOCK(Os); + locked = gcvTRUE; addr = dma_alloc_coherent(gcvNULL, mdl->numPages * PAGE_SIZE, &mdl->dmaHandle, -- 2.39.2