drm/ttm: fix fence locking in ttm_buffer_object_transfer, 2nd try
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 14 Jan 2013 14:08:14 +0000 (15:08 +0100)
committerDave Airlie <airlied@redhat.com>
Fri, 8 Feb 2013 00:44:31 +0000 (10:44 +1000)
commitff7c60c580d9722f820d85c9c58ca55ecc1ee7c4
treeb015a7739098ecf33a478b40103ab472fe0531fc
parent6bacaa9ddacb71c691d32c678d37bc59ffc71fac
drm/ttm: fix fence locking in ttm_buffer_object_transfer, 2nd try

This fixes up

commit e8e89622ed361c46bf90ba4828e685a8b603f7e5
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Tue Dec 18 22:25:11 2012 +0100

    drm/ttm: fix fence locking in ttm_buffer_object_transfer

which leaves behind a might_sleep in atomic context, since the
fence_lock spinlock is held over a kmalloc(GFP_KERNEL) call. The fix
is to revert the above commit and only take the lock where we need it,
around the call to ->sync_obj_ref.

v2: Fixup things noticed by Maarten Lankhorst:
- Brown paper bag locking bug.
- No need for kzalloc if we clear the entire thing on the next line.
- check for bo->sync_obj (totally unlikely race, but still someone
  else could have snuck in) and clear fbo->sync_obj if it's cleared
  already.

Reported-by: Dave Airlie <airlied@gmail.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/ttm/ttm_bo_util.c