drm/nouveau: fix race condition when under memory pressure
authorBen Skeggs <bskeggs@redhat.com>
Thu, 22 Jul 2010 23:06:52 +0000 (09:06 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 17 Aug 2010 01:58:56 +0000 (11:58 +1000)
commit415e6186f17136075f7cc825ba3835d005773637
treef6f837734b05a7006cab9b6badcda8590e1e4d24
parent56dfc58ea094e7a8607786f4762c65b09cd85738
drm/nouveau: fix race condition when under memory pressure

When VRAM is running out it's possible that the client's push buffers get
evicted to main memory.  When they're validated back in, the GPU may
be used for the copy back to VRAM, but the existing synchronisation code
only deals with inter-channel sync, not sync between PFIFO and PGRAPH on
the same channel.  This leads to PFIFO fetching from command buffers that
haven't quite been copied by PGRAPH yet.

This patch marks push buffers as so, and forces any GPU-assisted buffer
moves to be done on a different channel, which triggers the correct
synchronisation to happen before we submit them.

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