Skip to contentSkip to conversation

drm/nouveau: fix another lock unbalance in nouveau_crtc_page_flip

PATCH In review Maarten Lankhorst 1 participant 2 messages May 1, 2014

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 drm/nouveau: fix another lock unbalance in nouveau_crtc_page_flip

Fixes a regression introduced by 060810d7abaabca "drm/nouveau: fix locking issues in page flipping paths". chan->cli->mutex is unlocked a second time in the fail_unreserve path, fix this by moving mutex_unlock down.

Cc [email protected] # v3.11+

---

drivers/gpu/drm/nouveau/nouveau_display.c +1 -1
index 24011596af43..5524a3705224 100644
@@ -762,9 +762,9 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
 	}
 
 	ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence);
-	mutex_unlock(&chan->cli->mutex);
 	if (ret)
 		goto fail_unreserve;
+	mutex_unlock(&chan->cli->mutex);
 
 	/* Update the crtc struct and cleanup */
 	crtc->fb = fb;
#1 lore raw

op 01-05-14 13:58, Maarten Lankhorst schreef:

Quoted 11 lines

Fixes a regression introduced by 060810d7abaabca "drm/nouveau: fix locking issues in page flipping paths". chan->cli->mutex is unlocked a second time in the fail_unreserve path, fix this by moving mutex_unlock down.

Cc [email protected] # v3.11+

---

drivers/gpu/drm/nouveau/nouveau_display.c +0 -0
index 24011596af43..5524a3705224 100644

drivers/gpu/drm/nouveau/nouveau_display.c nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, · line 770

Quoted 10 lines
drivers/gpu/drm/nouveau/nouveau_display.c +1 -1
@@ -762,9 +762,9 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
     }
 
     ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence);
-    mutex_unlock(&chan->cli->mutex);
     if (ret)
         goto fail_unreserve;
+    mutex_unlock(&chan->cli->mutex);
 
     /* Update the crtc struct and cleanup */
     crtc->fb = fb;

I had a feeling I missed something here..