drm/nouveau: fix locking issues in page flipping paths

Dan Carpenter dan.carpenter at oracle.com
Wed Jul 24 09:08:12 PDT 2013


Hello Ben Skeggs,

The patch 060810d7abaa: "drm/nouveau: fix locking issues in page 
flipping paths" from Jul 8, 2013, leads to the following Smatch warning:
"drivers/gpu/drm/nouveau/nouveau_display.c:599 
nouveau_crtc_page_flip()
	 error: double unlock 'mutex:&chan->cli->mutex'"

drivers/gpu/drm/nouveau/nouveau_display.c
   582          ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence);
   583          mutex_unlock(&chan->cli->mutex);
                ^^^^^^^^^^^^
Unlock.

   584          if (ret)
   585                  goto fail_unreserve;
   586  
   587          /* Update the crtc struct and cleanup */
   588          crtc->fb = fb;
   589  
   590          ttm_eu_fence_buffer_objects(&ticket, &res, fence);
   591          if (old_bo != new_bo)
   592                  nouveau_bo_unpin(old_bo);
   593          nouveau_fence_unref(&fence);
   594          return 0;
   595  
   596  fail_unreserve:
   597          ttm_eu_backoff_reservation(&ticket, &res);
   598  fail_unpin:
   599          mutex_unlock(&chan->cli->mutex);
                ^^^^^^^^^^^^
Second unlock.

   600          if (old_bo != new_bo)
   601                  nouveau_bo_unpin(new_bo);

This looks simple enough to fix, but the previous two attempts at fixing
the locking here have scared me a little.  ;)

regards,
dan carpenter



More information about the dri-devel mailing list