nouveau: synchronize "scratch runout" destruction with the command stream
authorMarcin Ślusarz <marcin.slusarz@gmail.com>
Tue, 31 Mar 2015 20:04:31 +0000 (22:04 +0200)
committerMarcin Ślusarz <marcin.slusarz@gmail.com>
Tue, 31 Mar 2015 20:04:31 +0000 (22:04 +0200)
commitf9e2295560f9b4869fa2a94933c1881ec7970af4
tree7f61f1b60c8903f75e622b9bb86f07fbabfcf8e4
parent3db0317351e02be4498c7833262ac919d597b396
nouveau: synchronize "scratch runout" destruction with the command stream

When nvc0_push_vbo calls nouveau_scratch_done it does not mean
scratch buffers can be freed immediately. It means "when hardware
advances to this place in the command stream the scratch buffers
can be freed".

To fix it, just postpone scratch runout destruction after current
fence is signalled.

The bug existed for a very long time. Nobody noticed, because
"scratch runout" code path is rarely executed.

Fixes hang at the very beginning of first mission in "Serious Sam 3"
on nve7/gk107. It manifested as:

nouveau E[   PFIFO][0000:01:00.0] read fault at 0x000a9e0000 [PTE] from GR/GPC0/PE_2 on channel 0x007f853000 [Sam3[17056]]

Cc: "10.4 10.5" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/nouveau_buffer.c
src/gallium/drivers/nouveau/nouveau_context.h