summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/nouveau_fence.c
diff options
context:
space:
mode:
authorRobert Richter <robert.richter@amd.com>2010-10-01 10:54:17 +0400
committerRobert Richter <robert.richter@amd.com>2010-10-01 10:54:17 +0400
commitef70fcc0cd5d98f5e2df82c9e598b47f351d4f66 (patch)
treeb801ba4d7ebb1155df68d530df49444ffa6252cc /drivers/gpu/drm/nouveau/nouveau_fence.c
parent4cbe75be5c6ae86bdc7daec864eeb2dfd66f48bb (diff)
parent98d943b02f6f1b57787ff1aa6f34d019a407e3ee (diff)
downloadlinux-ef70fcc0cd5d98f5e2df82c9e598b47f351d4f66.tar.xz
Merge branch 'oprofile/urgent' into oprofile/core
Conflicts: arch/arm/oprofile/common.c Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_fence.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_fence.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
index 6b208ffafa8d..87ac21ec23d2 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
@@ -64,16 +64,17 @@ nouveau_fence_update(struct nouveau_channel *chan)
struct nouveau_fence *fence;
uint32_t sequence;
+ spin_lock(&chan->fence.lock);
+
if (USE_REFCNT)
sequence = nvchan_rd32(chan, 0x48);
else
sequence = atomic_read(&chan->fence.last_sequence_irq);
if (chan->fence.sequence_ack == sequence)
- return;
+ goto out;
chan->fence.sequence_ack = sequence;
- spin_lock(&chan->fence.lock);
list_for_each_safe(entry, tmp, &chan->fence.pending) {
fence = list_entry(entry, struct nouveau_fence, entry);
@@ -85,6 +86,7 @@ nouveau_fence_update(struct nouveau_channel *chan)
if (sequence == chan->fence.sequence_ack)
break;
}
+out:
spin_unlock(&chan->fence.lock);
}