drm/i915: Handle pagefaults in execbuffer user relocations
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 21 Nov 2010 22:07:12 +0000 (22:07 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 23 Nov 2010 20:11:43 +0000 (20:11 +0000)
commitbcf50e2775bbc3101932d8e4ab8c7902aa4163b4
treefa83645166876c378d911a8db8e6433e89a52179
parentda79de97d254145dcb7c08c978b1093eac15ec9c
drm/i915: Handle pagefaults in execbuffer user relocations

Currently if we hit a pagefault when applying a user relocation for the
execbuffer, we bail and return EFAULT to the application. Instead, we
need to unwind, drop the dev->struct_mutex, copy all the relocation
entries to a vmalloc array (to avoid any potential circular deadlocks
when resolving the pagefault), retake the mutex and then apply the
relocations.  Afterwards, we need to again drop the lock and copy the
vmalloc array back to userspace.

v2: Incorporate feedback from Daniel Vetter.

Reported-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c