Make WRITE_PUT() an inline function, and pass chan as an argument.
Update chan->dma.put in WRITE_PUT() instead of (almost) everywhere by
hand afterwards.

Signed-off-by: Pekka Paalanen <[email protected]>
---
 drivers/gpu/drm/nouveau/nouveau_dma.c |    5 ++---
 drivers/gpu/drm/nouveau/nouveau_dma.h |   16 +++++++++-------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.c 
b/drivers/gpu/drm/nouveau/nouveau_dma.c
index b787651..28e9c11 100644
--- a/drivers/gpu/drm/nouveau/nouveau_dma.c
+++ b/drivers/gpu/drm/nouveau/nouveau_dma.c
@@ -125,7 +125,7 @@ dma_wait_ring_wrap(struct nouveau_channel *chan, int size, 
uint32_t get,
        if (get <= NOUVEAU_DMA_SKIPS) {
                /* corner case - will be idle */
                if (chan->dma.put <= NOUVEAU_DMA_SKIPS)
-                       WRITE_PUT(NOUVEAU_DMA_SKIPS + 1);
+                       WRITE_PUT(chan, NOUVEAU_DMA_SKIPS + 1);
 
                for (; *timeout; (*timeout)--) {
                        if (READ_GET(chan, &get) && get > NOUVEAU_DMA_SKIPS)
@@ -138,9 +138,8 @@ dma_wait_ring_wrap(struct nouveau_channel *chan, int size, 
uint32_t get,
                        return -EBUSY;
        }
 
-       WRITE_PUT(NOUVEAU_DMA_SKIPS);
+       WRITE_PUT(chan, NOUVEAU_DMA_SKIPS);
        chan->dma.cur  = NOUVEAU_DMA_SKIPS;
-       chan->dma.put  = NOUVEAU_DMA_SKIPS;
        chan->dma.free = get - (NOUVEAU_DMA_SKIPS + 1);
        return 0;
 }
diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.h 
b/drivers/gpu/drm/nouveau/nouveau_dma.h
index cdaa37d..74db74e 100644
--- a/drivers/gpu/drm/nouveau/nouveau_dma.h
+++ b/drivers/gpu/drm/nouveau/nouveau_dma.h
@@ -118,11 +118,14 @@ BEGIN_RING(struct nouveau_channel *chan, int subc, int 
mthd, int size)
        OUT_RING(chan, (subc << 13) | (size << 18) | mthd);
 }
 
-#define WRITE_PUT(val) do {                                                    
\
-       DRM_MEMORYBARRIER();                                                   \
-       nouveau_bo_rd32(chan->pushbuf_bo, 0);                                  \
-       nvchan_wr32(chan->user_put, ((val) << 2) + chan->pushbuf_base);        \
-} while (0)
+static inline void
+WRITE_PUT(struct nouveau_channel *chan, uint32_t index)
+{
+       DRM_MEMORYBARRIER();
+       nouveau_bo_rd32(chan->pushbuf_bo, 0);
+       nvchan_wr32(chan->user_put, index * 4 + chan->pushbuf_base);
+       chan->dma.put = index;
+}
 
 static inline void
 FIRE_RING(struct nouveau_channel *chan)
@@ -135,8 +138,7 @@ FIRE_RING(struct nouveau_channel *chan)
                return;
        chan->accel_done = true;
 
-       WRITE_PUT(chan->dma.cur);
-       chan->dma.put = chan->dma.cur;
+       WRITE_PUT(chan, chan->dma.cur);
 }
 
 static inline void
-- 
1.6.3.3

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

Reply via email to