drm/nouveau: fix thinko in channel locking in semaphore path
authorBen Skeggs <bskeggs@redhat.com>
Mon, 11 Oct 2010 22:01:59 +0000 (08:01 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 3 Dec 2010 05:05:24 +0000 (15:05 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_fence.c

index 42694b122eefd69ec35897dde5d22590c7177bfd..5f9f66f350674527c844569c6ee9d86289e383e1 100644 (file)
@@ -393,23 +393,23 @@ nouveau_fence_sync(struct nouveau_fence *fence,
                return nouveau_fence_wait(fence, NULL, false, false);
        }
 
-       /* try to take wchan's mutex, if we can't take it right away
+       /* try to take chan's mutex, if we can't take it right away
         * we have to fallback to software sync to prevent locking
         * order issues
         */
-       if (!mutex_trylock(&wchan->mutex)) {
+       if (!mutex_trylock(&chan->mutex)) {
                free_semaphore(&sema->ref);
                return nouveau_fence_wait(fence, NULL, false, false);
        }
 
        /* Make wchan wait until it gets signalled */
        ret = emit_semaphore(wchan, NV_SW_SEMAPHORE_ACQUIRE, sema);
-       mutex_unlock(&wchan->mutex);
        if (ret)
                goto out;
 
        /* Signal the semaphore from chan */
        ret = emit_semaphore(chan, NV_SW_SEMAPHORE_RELEASE, sema);
+       mutex_unlock(&chan->mutex);
 out:
        kref_put(&sema->ref, free_semaphore);
        return ret;