drm/nouveau: move fence sequence check to start of loop
authorBen Skeggs <bskeggs@redhat.com>
Wed, 21 Mar 2012 03:51:03 +0000 (13:51 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 22 Mar 2012 07:17:36 +0000 (17:17 +1000)
I want to be able to use REF_CNT from other places in the kernel without
pushing a fence object onto the list of emitted fences.

The current code makes an assumption that every time the acked sequence is
bumped that there's at least one fence on the list that'll be signalled.

This will no longer be true in the near future.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_fence.c

index f676ecd3fd3c576c0b86c2990b934aa344671d2c..c1dc20f6cb85abd5810809c5b32a886537f4d9ce 100644 (file)
@@ -93,18 +93,17 @@ nouveau_fence_update(struct nouveau_channel *chan)
        }
 
        list_for_each_entry_safe(fence, tmp, &chan->fence.pending, entry) {
-               sequence = fence->sequence;
+               if (fence->sequence > chan->fence.sequence_ack)
+                       break;
+
                fence->signalled = true;
                list_del(&fence->entry);
-
-               if (unlikely(fence->work))
+               if (fence->work)
                        fence->work(fence->priv, true);
 
                kref_put(&fence->refcount, nouveau_fence_del);
-
-               if (sequence == chan->fence.sequence_ack)
-                       break;
        }
+
 out:
        spin_unlock(&chan->fence.lock);
 }