drm/nouveau: wait on fence after bo move if validating for another channel
authorBen Skeggs <bskeggs@redhat.com>
Tue, 12 Jan 2010 05:28:19 +0000 (15:28 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 14 Jan 2010 08:48:38 +0000 (18:48 +1000)
Not an ideal solution, but it'll do for the moment for correctness.  We
need to come up with a nicer way to manage inter-channel sync, the hw
is unfortunately a little lacking in this area.

Should fix some resume corruption, as well as corruption that may be seen
while under memory pressure.

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

index e342a418d434d41b9807ad2dd27683e0d4744084..db0ed4c13f9888d28f24577cb94c4add63856617 100644 (file)
@@ -469,6 +469,8 @@ nouveau_bo_move_accel_cleanup(struct nouveau_channel *chan,
 
        ret = ttm_bo_move_accel_cleanup(&nvbo->bo, fence, NULL,
                                        evict, no_wait, new_mem);
+       if (nvbo->channel && nvbo->channel != chan)
+               ret = nouveau_fence_wait(fence, NULL, false, false);
        nouveau_fence_unref((void *)&fence);
        return ret;
 }