drm/nouveau: Fix null deref in nouveau_fence_emit due to deleted fence
authorLuca Barbieri <luca@luca-barbieri.com>
Wed, 6 Jan 2010 03:02:45 +0000 (04:02 +0100)
committerDave Airlie <airlied@redhat.com>
Mon, 11 Jan 2010 04:41:17 +0000 (14:41 +1000)
commitd6126c5c8b2019658aadc9754dca80a7573dbff5
tree8c16737a07bf7b80b8048c3f13802c74ef5662b8
parentdc8d76cac942e7344a72ad18afb90fa46cf20bb4
drm/nouveau: Fix null deref in nouveau_fence_emit due to deleted fence

Currently Nouveau will unvalidate all buffers if it is forced to wait on
one, and then start revalidating from the beginning.  While doing so, it
destroys the operation fence, causing nouveau_fence_emit to crash.

This patch fixes this bug by taking the fence object out of validate_op
and creating it just before emit.  The fence pointer is initialized to 0
and unref'ed unconditionally.

In addition to fixing the bug, this prevents its reintroduction and
simplifies the code.

Signed-off-by: Luca Barbieri <luca@luca-barbieri.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_gem.c