drm/nv50: prevent (IB_PUT == IB_GET) for occurring unless idle
authorBen Skeggs <bskeggs@redhat.com>
Wed, 29 Sep 2010 23:09:42 +0000 (09:09 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 4 Oct 2010 23:58:47 +0000 (09:58 +1000)
Should fix a DMA race condition I've never seen myself, but could be
the culprit in some random hangs that have been reported.

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

index 9d27acda87e24b6c3ad88f9c2ca4a332c4be14a4..eb24e2b05193fd7285407ae1ff05f057a089fc55 100644 (file)
@@ -214,7 +214,7 @@ nv50_dma_push_wait(struct nouveau_channel *chan, int count)
 
                chan->dma.ib_free = get - chan->dma.ib_put;
                if (chan->dma.ib_free <= 0)
-                       chan->dma.ib_free += chan->dma.ib_max + 1;
+                       chan->dma.ib_free += chan->dma.ib_max;
        }
 
        return 0;