]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 3 Aug 2018 05:47:48 +0000 (07:47 +0200)
[ Upstream commit 4f2fc25c0f8bcc8db1b8a7b21e88c3d7f35c5acb ]

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>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c

index 84bd703dd89714cbc54343e54ae8d78b0f504185..8305cb67cbfcb99aad528017e02fd85f656ec971 100644 (file)
@@ -155,10 +155,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);