From abfe2fa05ef88608037db9f902160f2ce8d43f61 Mon Sep 17 00:00:00 2001 From: Janusz Sobczak Date: Wed, 11 Aug 2010 15:00:12 +0200 Subject: [PATCH] gpu: pvr: Fixed error path in cache flush function. PVRSRVCacheFlushDRIBW returns in the error path without releasing current->mm->mmap_sem semaphore. The client application stalls forever and cannot be killed. Signed-off-by: Janusz Sobczak Signed-off-by: Imre Deak --- pvr/bridged_pvr_bridge.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pvr/bridged_pvr_bridge.c b/pvr/bridged_pvr_bridge.c index d7d9a8d..7409816 100644 --- a/pvr/bridged_pvr_bridge.c +++ b/pvr/bridged_pvr_bridge.c @@ -705,16 +705,15 @@ static int PVRSRVCacheFlushDRIBW(u32 ui32BridgeID, down_read(¤t->mm->mmap_sem); vma = find_vma(current->mm, start); if (vma == NULL || vma->vm_start > start || - vma->vm_end < start + len) { + vma->vm_end < start + len) pr_err("PVR: %s: invalid address %08lx %zu %c\n", __func__, start, len, type == DRM_PVR2D_CFLUSH_TO_GPU ? 'c' : type == DRM_PVR2D_CFLUSH_FROM_GPU ? 'i' : '?'); - return 0; - } + else + psRetOUT->eError = FlushCacheDRI(type, start, len); - psRetOUT->eError = FlushCacheDRI(type, start, len); up_read(¤t->mm->mmap_sem); return 0; -- 2.39.5