Author: dumbbell
Date: Sun Aug 25 15:29:23 2013
New Revision: 254878
URL: http://svnweb.freebsd.org/changeset/base/254878

Log:
  drm/ttm: Fix a reversed condition and add missing locks
  
  This allows to run OpenGL applications on at least two test machines
  with the Radeon driver.
  
  Approved by:  kib@

Modified:
  head/sys/dev/drm2/ttm/ttm_bo.c

Modified: head/sys/dev/drm2/ttm/ttm_bo.c
==============================================================================
--- head/sys/dev/drm2/ttm/ttm_bo.c      Sun Aug 25 15:26:45 2013        
(r254877)
+++ head/sys/dev/drm2/ttm/ttm_bo.c      Sun Aug 25 15:29:23 2013        
(r254878)
@@ -145,7 +145,7 @@ ttm_bo_wait_unreserved_locked(struct ttm
                flags = 0;
                wmsg = "ttbowu";
        }
-       while (!ttm_bo_is_reserved(bo)) {
+       while (ttm_bo_is_reserved(bo)) {
                ret = -msleep(bo, &bo->glob->lru_lock, flags, wmsg, 0);
                if (ret != 0)
                        break;
@@ -281,14 +281,15 @@ int ttm_bo_reserve(struct ttm_buffer_obj
        int put_count = 0;
        int ret;
 
+       mtx_lock(&bo->glob->lru_lock);
        ret = ttm_bo_reserve_nolru(bo, interruptible, no_wait, use_sequence,
                                   sequence);
        if (likely(ret == 0)) {
-               mtx_lock(&glob->lru_lock);
                put_count = ttm_bo_del_from_lru(bo);
                mtx_unlock(&glob->lru_lock);
                ttm_bo_list_ref_sub(bo, put_count, true);
-       }
+       } else
+               mtx_unlock(&bo->glob->lru_lock);
 
        return ret;
 }
@@ -333,13 +334,14 @@ int ttm_bo_reserve_slowpath(struct ttm_b
        struct ttm_bo_global *glob = bo->glob;
        int put_count, ret;
 
+       mtx_lock(&glob->lru_lock);
        ret = ttm_bo_reserve_slowpath_nolru(bo, interruptible, sequence);
        if (likely(!ret)) {
-               mtx_lock(&glob->lru_lock);
                put_count = ttm_bo_del_from_lru(bo);
                mtx_unlock(&glob->lru_lock);
                ttm_bo_list_ref_sub(bo, put_count, true);
-       }
+       } else
+               mtx_unlock(&glob->lru_lock);
        return ret;
 }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to