On early cards relying on synthetic methods for fence signalling
(nv0x) the IRQ was sometimes raised before the fence had been appended
to the pending list. In that case it remained unsignalled and it
caused trouble (bug 23593).

Signed-off-by: Francisco Jerez <[email protected]>
---
 drivers/gpu/drm/nouveau/nouveau_fence.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c 
b/drivers/gpu/drm/nouveau/nouveau_fence.c
index 32b4bb9..ad98e9b 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
@@ -137,14 +137,15 @@ nouveau_fence_emit(struct nouveau_fence *fence)
 
        fence->sequence = ++chan->fence.sequence;
 
-       BEGIN_RING(chan, NvSubM2MF, USE_REFCNT ? 0x0050 : 0x0150, 1);
-       OUT_RING  (chan, fence->sequence);
-       FIRE_RING (chan);
-
        kref_get(&fence->refcount);
        spin_lock_irqsave(&chan->fence.lock, flags);
        list_add_tail(&fence->entry, &chan->fence.pending);
        spin_unlock_irqrestore(&chan->fence.lock, flags);
+
+       BEGIN_RING(chan, NvSubM2MF, USE_REFCNT ? 0x0050 : 0x0150, 1);
+       OUT_RING  (chan, fence->sequence);
+       FIRE_RING (chan);
+
        return 0;
 }
 
-- 
1.6.3.3

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to