drm/nouveau/fifo/gk104-: poll for runlist update completion
authorBen Skeggs <bskeggs@redhat.com>
Tue, 8 May 2018 10:39:46 +0000 (20:39 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 18 May 2018 05:01:21 +0000 (15:01 +1000)
Newer HW doesn't appear to send this event, which will cause long delays
in runlist updates if they don't complete immediately.

RM doesn't use these events anywhere, and an NVGPU commit message notes
that polling is the preferred method even on HW that supports the event.

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

index afb3ed06ec89e10f79bb6ccf7f86a27d2f08ebf6..2b8e0d3d2d96c7f3a86f7cacbc4e002d6dfa4d1d 100644 (file)
@@ -170,10 +170,10 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl)
                                    (target << 28));
        nvkm_wr32(device, 0x002274, (runl << 20) | nr);
 
-       if (wait_event_timeout(fifo->runlist[runl].wait,
-                              !(nvkm_rd32(device, 0x002284 + (runl * 0x08))
-                                      & 0x00100000),
-                              msecs_to_jiffies(2000)) == 0)
+       if (nvkm_msec(device, 2000,
+               if (!(nvkm_rd32(device, 0x002284 + (runl * 0x08)) & 0x00100000))
+                       break;
+       ) < 0)
                nvkm_error(subdev, "runlist %d update timeout\n", runl);
 unlock:
        mutex_unlock(&subdev->mutex);