48 lines
1.4 KiB
Diff
48 lines
1.4 KiB
Diff
From: Ben Skeggs <bskeggs@redhat.com>
|
|
Date: Wed, 21 Mar 2012 13:51:03 +1000
|
|
Subject: [3/9] drm/nouveau: move fence sequence check to start of loop
|
|
|
|
commit b08abd4e9a11d637d3c2ff52b2ebbc1b3f686d06 upstream.
|
|
|
|
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 | 11 +++++------
|
|
1 file changed, 5 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
|
|
index f676ecd..c1dc20f 100644
|
|
--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
|
|
+++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
|
|
@@ -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);
|
|
}
|