aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2011-10-27 12:28:37 -0400
committerDave Airlie <airlied@redhat.com>2011-10-27 12:28:37 -0400
commit1717c0e23f411147490c7a3312b894f0ea9a5fb1 (patch)
tree68c94629535328221188c7ebd41f9e413da41cb0 /drivers/gpu/drm
parent83f30d0e0343ad010afbc3523007b68e8b439694 (diff)
Revert "drm/ttm: add a way to bo_wait for either the last read or last write"
This reverts commit dfadbbdb57b3f2bb33e14f129a43047c6f0caefa. Further upstream discussion between Marek and Thomas decided this wasn't fully baked and needed further work, so revert it before it hits mainline. Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_bo.c3
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_gem.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon_cs.c1
-rw-r--r--drivers/gpu/drm/radeon/radeon_object.c2
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c97
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo_util.c26
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo_vm.c2
-rw-r--r--drivers/gpu/drm/ttm/ttm_execbuf_util.c19
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.c2
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c1
10 files changed, 38 insertions, 120 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 424dff5d0aba..7226f419e178 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -1104,8 +1104,7 @@ nouveau_bo_vma_del(struct nouveau_bo *nvbo, struct nouveau_vma *vma)
1104 if (vma->node) { 1104 if (vma->node) {
1105 if (nvbo->bo.mem.mem_type != TTM_PL_SYSTEM) { 1105 if (nvbo->bo.mem.mem_type != TTM_PL_SYSTEM) {
1106 spin_lock(&nvbo->bo.bdev->fence_lock); 1106 spin_lock(&nvbo->bo.bdev->fence_lock);
1107 ttm_bo_wait(&nvbo->bo, false, false, false, 1107 ttm_bo_wait(&nvbo->bo, false, false, false);
1108 TTM_USAGE_READWRITE);
1109 spin_unlock(&nvbo->bo.bdev->fence_lock); 1108 spin_unlock(&nvbo->bo.bdev->fence_lock);
1110 nouveau_vm_unmap(vma); 1109 nouveau_vm_unmap(vma);
1111 } 1110 }
diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
index 322bf62a0645..5f0bc57fdaab 100644
--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -589,8 +589,7 @@ nouveau_gem_pushbuf_reloc_apply(struct drm_device *dev,
589 } 589 }
590 590
591 spin_lock(&nvbo->bo.bdev->fence_lock); 591 spin_lock(&nvbo->bo.bdev->fence_lock);
592 ret = ttm_bo_wait(&nvbo->bo, false, false, false, 592 ret = ttm_bo_wait(&nvbo->bo, false, false, false);
593 TTM_USAGE_READWRITE);
594 spin_unlock(&nvbo->bo.bdev->fence_lock); 593 spin_unlock(&nvbo->bo.bdev->fence_lock);
595 if (ret) { 594 if (ret) {
596 NV_ERROR(dev, "reloc wait_idle failed: %d\n", ret); 595 NV_ERROR(dev, "reloc wait_idle failed: %d\n", ret);
@@ -826,7 +825,7 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data,
826 nvbo = nouveau_gem_object(gem); 825 nvbo = nouveau_gem_object(gem);
827 826
828 spin_lock(&nvbo->bo.bdev->fence_lock); 827 spin_lock(&nvbo->bo.bdev->fence_lock);
829 ret = ttm_bo_wait(&nvbo->bo, true, true, no_wait, TTM_USAGE_READWRITE); 828 ret = ttm_bo_wait(&nvbo->bo, true, true, no_wait);
830 spin_unlock(&nvbo->bo.bdev->fence_lock); 829 spin_unlock(&nvbo->bo.bdev->fence_lock);
831 drm_gem_object_unreference_unlocked(gem); 830 drm_gem_object_unreference_unlocked(gem);
832 return ret; 831 return ret;
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index 14e853151105..fae00c0d75aa 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -80,7 +80,6 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
80 p->relocs[i].lobj.wdomain = r->write_domain; 80 p->relocs[i].lobj.wdomain = r->write_domain;
81 p->relocs[i].lobj.rdomain = r->read_domains; 81 p->relocs[i].lobj.rdomain = r->read_domains;
82 p->relocs[i].lobj.tv.bo = &p->relocs[i].robj->tbo; 82 p->relocs[i].lobj.tv.bo = &p->relocs[i].robj->tbo;
83 p->relocs[i].lobj.tv.usage = TTM_USAGE_READWRITE;
84 p->relocs[i].handle = r->handle; 83 p->relocs[i].handle = r->handle;
85 p->relocs[i].flags = r->flags; 84 p->relocs[i].flags = r->flags;
86 radeon_bo_list_add_object(&p->relocs[i].lobj, 85 radeon_bo_list_add_object(&p->relocs[i].lobj,
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index b8f75f5d344b..1c851521f458 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -527,7 +527,7 @@ int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type, bool no_wait)
527 if (mem_type) 527 if (mem_type)
528 *mem_type = bo->tbo.mem.mem_type; 528 *mem_type = bo->tbo.mem.mem_type;
529 if (bo->tbo.sync_obj) 529 if (bo->tbo.sync_obj)
530 r = ttm_bo_wait(&bo->tbo, true, true, no_wait, false); 530 r = ttm_bo_wait(&bo->tbo, true, true, no_wait);
531 spin_unlock(&bo->tbo.bdev->fence_lock); 531 spin_unlock(&bo->tbo.bdev->fence_lock);
532 ttm_bo_unreserve(&bo->tbo); 532 ttm_bo_unreserve(&bo->tbo);
533 return r; 533 return r;
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 50fc8e4c9a31..617b64678fc6 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -499,7 +499,7 @@ static void ttm_bo_cleanup_refs_or_queue(struct ttm_buffer_object *bo)
499 int ret; 499 int ret;
500 500
501 spin_lock(&bdev->fence_lock); 501 spin_lock(&bdev->fence_lock);
502 (void) ttm_bo_wait(bo, false, false, true, TTM_USAGE_READWRITE); 502 (void) ttm_bo_wait(bo, false, false, true);
503 if (!bo->sync_obj) { 503 if (!bo->sync_obj) {
504 504
505 spin_lock(&glob->lru_lock); 505 spin_lock(&glob->lru_lock);
@@ -567,8 +567,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo,
567 567
568retry: 568retry:
569 spin_lock(&bdev->fence_lock); 569 spin_lock(&bdev->fence_lock);
570 ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu, 570 ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu);
571 TTM_USAGE_READWRITE);
572 spin_unlock(&bdev->fence_lock); 571 spin_unlock(&bdev->fence_lock);
573 572
574 if (unlikely(ret != 0)) 573 if (unlikely(ret != 0))
@@ -727,8 +726,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible,
727 int ret = 0; 726 int ret = 0;
728 727
729 spin_lock(&bdev->fence_lock); 728 spin_lock(&bdev->fence_lock);
730 ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu, 729 ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu);
731 TTM_USAGE_READWRITE);
732 spin_unlock(&bdev->fence_lock); 730 spin_unlock(&bdev->fence_lock);
733 731
734 if (unlikely(ret != 0)) { 732 if (unlikely(ret != 0)) {
@@ -1075,8 +1073,7 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
1075 * instead of doing it here. 1073 * instead of doing it here.
1076 */ 1074 */
1077 spin_lock(&bdev->fence_lock); 1075 spin_lock(&bdev->fence_lock);
1078 ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu, 1076 ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu);
1079 TTM_USAGE_READWRITE);
1080 spin_unlock(&bdev->fence_lock); 1077 spin_unlock(&bdev->fence_lock);
1081 if (ret) 1078 if (ret)
1082 return ret; 1079 return ret;
@@ -1697,83 +1694,34 @@ out_unlock:
1697 return ret; 1694 return ret;
1698} 1695}
1699 1696
1700static void ttm_bo_unref_sync_obj_locked(struct ttm_buffer_object *bo,
1701 void *sync_obj,
1702 void **extra_sync_obj)
1703{
1704 struct ttm_bo_device *bdev = bo->bdev;
1705 struct ttm_bo_driver *driver = bdev->driver;
1706 void *tmp_obj = NULL, *tmp_obj_read = NULL, *tmp_obj_write = NULL;
1707
1708 /* We must unref the sync obj wherever it's ref'd.
1709 * Note that if we unref bo->sync_obj, we can unref both the read
1710 * and write sync objs too, because they can't be newer than
1711 * bo->sync_obj, so they are no longer relevant. */
1712 if (sync_obj == bo->sync_obj ||
1713 sync_obj == bo->sync_obj_read) {
1714 tmp_obj_read = bo->sync_obj_read;
1715 bo->sync_obj_read = NULL;
1716 }
1717 if (sync_obj == bo->sync_obj ||
1718 sync_obj == bo->sync_obj_write) {
1719 tmp_obj_write = bo->sync_obj_write;
1720 bo->sync_obj_write = NULL;
1721 }
1722 if (sync_obj == bo->sync_obj) {
1723 tmp_obj = bo->sync_obj;
1724 bo->sync_obj = NULL;
1725 }
1726
1727 clear_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags);
1728 spin_unlock(&bdev->fence_lock);
1729 if (tmp_obj)
1730 driver->sync_obj_unref(&tmp_obj);
1731 if (tmp_obj_read)
1732 driver->sync_obj_unref(&tmp_obj_read);
1733 if (tmp_obj_write)
1734 driver->sync_obj_unref(&tmp_obj_write);
1735 if (extra_sync_obj)
1736 driver->sync_obj_unref(extra_sync_obj);
1737 spin_lock(&bdev->fence_lock);
1738}
1739
1740int ttm_bo_wait(struct ttm_buffer_object *bo, 1697int ttm_bo_wait(struct ttm_buffer_object *bo,
1741 bool lazy, bool interruptible, bool no_wait, 1698 bool lazy, bool interruptible, bool no_wait)
1742 enum ttm_buffer_usage usage)
1743{ 1699{
1744 struct ttm_bo_driver *driver = bo->bdev->driver; 1700 struct ttm_bo_driver *driver = bo->bdev->driver;
1745 struct ttm_bo_device *bdev = bo->bdev; 1701 struct ttm_bo_device *bdev = bo->bdev;
1746 void *sync_obj; 1702 void *sync_obj;
1747 void *sync_obj_arg; 1703 void *sync_obj_arg;
1748 int ret = 0; 1704 int ret = 0;
1749 void **bo_sync_obj;
1750 1705
1751 switch (usage) { 1706 if (likely(bo->sync_obj == NULL))
1752 case TTM_USAGE_READ:
1753 bo_sync_obj = &bo->sync_obj_read;
1754 break;
1755 case TTM_USAGE_WRITE:
1756 bo_sync_obj = &bo->sync_obj_write;
1757 break;
1758 case TTM_USAGE_READWRITE:
1759 default:
1760 bo_sync_obj = &bo->sync_obj;
1761 }
1762
1763 if (likely(*bo_sync_obj == NULL))
1764 return 0; 1707 return 0;
1765 1708
1766 while (*bo_sync_obj) { 1709 while (bo->sync_obj) {
1767 1710
1768 if (driver->sync_obj_signaled(*bo_sync_obj, bo->sync_obj_arg)) { 1711 if (driver->sync_obj_signaled(bo->sync_obj, bo->sync_obj_arg)) {
1769 ttm_bo_unref_sync_obj_locked(bo, *bo_sync_obj, NULL); 1712 void *tmp_obj = bo->sync_obj;
1713 bo->sync_obj = NULL;
1714 clear_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags);
1715 spin_unlock(&bdev->fence_lock);
1716 driver->sync_obj_unref(&tmp_obj);
1717 spin_lock(&bdev->fence_lock);
1770 continue; 1718 continue;
1771 } 1719 }
1772 1720
1773 if (no_wait) 1721 if (no_wait)
1774 return -EBUSY; 1722 return -EBUSY;
1775 1723
1776 sync_obj = driver->sync_obj_ref(*bo_sync_obj); 1724 sync_obj = driver->sync_obj_ref(bo->sync_obj);
1777 sync_obj_arg = bo->sync_obj_arg; 1725 sync_obj_arg = bo->sync_obj_arg;
1778 spin_unlock(&bdev->fence_lock); 1726 spin_unlock(&bdev->fence_lock);
1779 ret = driver->sync_obj_wait(sync_obj, sync_obj_arg, 1727 ret = driver->sync_obj_wait(sync_obj, sync_obj_arg,
@@ -1784,9 +1732,16 @@ int ttm_bo_wait(struct ttm_buffer_object *bo,
1784 return ret; 1732 return ret;
1785 } 1733 }
1786 spin_lock(&bdev->fence_lock); 1734 spin_lock(&bdev->fence_lock);
1787 if (likely(*bo_sync_obj == sync_obj && 1735 if (likely(bo->sync_obj == sync_obj &&
1788 bo->sync_obj_arg == sync_obj_arg)) { 1736 bo->sync_obj_arg == sync_obj_arg)) {
1789 ttm_bo_unref_sync_obj_locked(bo, *bo_sync_obj, &sync_obj); 1737 void *tmp_obj = bo->sync_obj;
1738 bo->sync_obj = NULL;
1739 clear_bit(TTM_BO_PRIV_FLAG_MOVING,
1740 &bo->priv_flags);
1741 spin_unlock(&bdev->fence_lock);
1742 driver->sync_obj_unref(&sync_obj);
1743 driver->sync_obj_unref(&tmp_obj);
1744 spin_lock(&bdev->fence_lock);
1790 } else { 1745 } else {
1791 spin_unlock(&bdev->fence_lock); 1746 spin_unlock(&bdev->fence_lock);
1792 driver->sync_obj_unref(&sync_obj); 1747 driver->sync_obj_unref(&sync_obj);
@@ -1810,7 +1765,7 @@ int ttm_bo_synccpu_write_grab(struct ttm_buffer_object *bo, bool no_wait)
1810 if (unlikely(ret != 0)) 1765 if (unlikely(ret != 0))
1811 return ret; 1766 return ret;
1812 spin_lock(&bdev->fence_lock); 1767 spin_lock(&bdev->fence_lock);
1813 ret = ttm_bo_wait(bo, false, true, no_wait, TTM_USAGE_READWRITE); 1768 ret = ttm_bo_wait(bo, false, true, no_wait);
1814 spin_unlock(&bdev->fence_lock); 1769 spin_unlock(&bdev->fence_lock);
1815 if (likely(ret == 0)) 1770 if (likely(ret == 0))
1816 atomic_inc(&bo->cpu_writers); 1771 atomic_inc(&bo->cpu_writers);
@@ -1884,7 +1839,7 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
1884 */ 1839 */
1885 1840
1886 spin_lock(&bo->bdev->fence_lock); 1841 spin_lock(&bo->bdev->fence_lock);
1887 ret = ttm_bo_wait(bo, false, false, false, TTM_USAGE_READWRITE); 1842 ret = ttm_bo_wait(bo, false, false, false);
1888 spin_unlock(&bo->bdev->fence_lock); 1843 spin_unlock(&bo->bdev->fence_lock);
1889 1844
1890 if (unlikely(ret != 0)) 1845 if (unlikely(ret != 0))
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 6135f58169ce..ae3c6f5dd2b7 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -436,8 +436,6 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
436 atomic_set(&fbo->cpu_writers, 0); 436 atomic_set(&fbo->cpu_writers, 0);
437 437
438 fbo->sync_obj = driver->sync_obj_ref(bo->sync_obj); 438 fbo->sync_obj = driver->sync_obj_ref(bo->sync_obj);
439 fbo->sync_obj_read = driver->sync_obj_ref(bo->sync_obj_read);
440 fbo->sync_obj_write = driver->sync_obj_ref(bo->sync_obj_write);
441 kref_init(&fbo->list_kref); 439 kref_init(&fbo->list_kref);
442 kref_init(&fbo->kref); 440 kref_init(&fbo->kref);
443 fbo->destroy = &ttm_transfered_destroy; 441 fbo->destroy = &ttm_transfered_destroy;
@@ -620,30 +618,20 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
620 struct ttm_mem_reg *old_mem = &bo->mem; 618 struct ttm_mem_reg *old_mem = &bo->mem;
621 int ret; 619 int ret;
622 struct ttm_buffer_object *ghost_obj; 620 struct ttm_buffer_object *ghost_obj;
623 void *tmp_obj = NULL, *tmp_obj_read = NULL, *tmp_obj_write = NULL; 621 void *tmp_obj = NULL;
624 622
625 spin_lock(&bdev->fence_lock); 623 spin_lock(&bdev->fence_lock);
626 if (bo->sync_obj) 624 if (bo->sync_obj) {
627 tmp_obj = bo->sync_obj; 625 tmp_obj = bo->sync_obj;
628 if (bo->sync_obj_read) 626 bo->sync_obj = NULL;
629 tmp_obj_read = bo->sync_obj_read; 627 }
630 if (bo->sync_obj_write)
631 tmp_obj_write = bo->sync_obj_write;
632
633 bo->sync_obj = driver->sync_obj_ref(sync_obj); 628 bo->sync_obj = driver->sync_obj_ref(sync_obj);
634 bo->sync_obj_read = driver->sync_obj_ref(sync_obj);
635 bo->sync_obj_write = driver->sync_obj_ref(sync_obj);
636 bo->sync_obj_arg = sync_obj_arg; 629 bo->sync_obj_arg = sync_obj_arg;
637 if (evict) { 630 if (evict) {
638 ret = ttm_bo_wait(bo, false, false, false, 631 ret = ttm_bo_wait(bo, false, false, false);
639 TTM_USAGE_READWRITE);
640 spin_unlock(&bdev->fence_lock); 632 spin_unlock(&bdev->fence_lock);
641 if (tmp_obj) 633 if (tmp_obj)
642 driver->sync_obj_unref(&tmp_obj); 634 driver->sync_obj_unref(&tmp_obj);
643 if (tmp_obj_read)
644 driver->sync_obj_unref(&tmp_obj_read);
645 if (tmp_obj_write)
646 driver->sync_obj_unref(&tmp_obj_write);
647 if (ret) 635 if (ret)
648 return ret; 636 return ret;
649 637
@@ -667,10 +655,6 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
667 spin_unlock(&bdev->fence_lock); 655 spin_unlock(&bdev->fence_lock);
668 if (tmp_obj) 656 if (tmp_obj)
669 driver->sync_obj_unref(&tmp_obj); 657 driver->sync_obj_unref(&tmp_obj);
670 if (tmp_obj_read)
671 driver->sync_obj_unref(&tmp_obj_read);
672 if (tmp_obj_write)
673 driver->sync_obj_unref(&tmp_obj_write);
674 658
675 ret = ttm_buffer_object_transfer(bo, &ghost_obj); 659 ret = ttm_buffer_object_transfer(bo, &ghost_obj);
676 if (ret) 660 if (ret)
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index ff1e26f4b094..221b924acebe 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -122,7 +122,7 @@ static int ttm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
122 122
123 spin_lock(&bdev->fence_lock); 123 spin_lock(&bdev->fence_lock);
124 if (test_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags)) { 124 if (test_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags)) {
125 ret = ttm_bo_wait(bo, false, true, false, TTM_USAGE_READWRITE); 125 ret = ttm_bo_wait(bo, false, true, false);
126 spin_unlock(&bdev->fence_lock); 126 spin_unlock(&bdev->fence_lock);
127 if (unlikely(ret != 0)) { 127 if (unlikely(ret != 0)) {
128 retval = (ret != -ERESTARTSYS) ? 128 retval = (ret != -ERESTARTSYS) ?
diff --git a/drivers/gpu/drm/ttm/ttm_execbuf_util.c b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
index 36d111a88232..3832fe10b4df 100644
--- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c
+++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
@@ -221,18 +221,8 @@ void ttm_eu_fence_buffer_objects(struct list_head *list, void *sync_obj)
221 221
222 list_for_each_entry(entry, list, head) { 222 list_for_each_entry(entry, list, head) {
223 bo = entry->bo; 223 bo = entry->bo;
224 entry->old_sync_obj_read = NULL;
225 entry->old_sync_obj_write = NULL;
226 entry->old_sync_obj = bo->sync_obj; 224 entry->old_sync_obj = bo->sync_obj;
227 bo->sync_obj = driver->sync_obj_ref(sync_obj); 225 bo->sync_obj = driver->sync_obj_ref(sync_obj);
228 if (entry->usage & TTM_USAGE_READ) {
229 entry->old_sync_obj_read = bo->sync_obj_read;
230 bo->sync_obj_read = driver->sync_obj_ref(sync_obj);
231 }
232 if (entry->usage & TTM_USAGE_WRITE) {
233 entry->old_sync_obj_write = bo->sync_obj_write;
234 bo->sync_obj_write = driver->sync_obj_ref(sync_obj);
235 }
236 bo->sync_obj_arg = entry->new_sync_obj_arg; 226 bo->sync_obj_arg = entry->new_sync_obj_arg;
237 ttm_bo_unreserve_locked(bo); 227 ttm_bo_unreserve_locked(bo);
238 entry->reserved = false; 228 entry->reserved = false;
@@ -241,15 +231,8 @@ void ttm_eu_fence_buffer_objects(struct list_head *list, void *sync_obj)
241 spin_unlock(&bdev->fence_lock); 231 spin_unlock(&bdev->fence_lock);
242 232
243 list_for_each_entry(entry, list, head) { 233 list_for_each_entry(entry, list, head) {
244 if (entry->old_sync_obj) { 234 if (entry->old_sync_obj)
245 driver->sync_obj_unref(&entry->old_sync_obj); 235 driver->sync_obj_unref(&entry->old_sync_obj);
246 }
247 if (entry->old_sync_obj_read) {
248 driver->sync_obj_unref(&entry->old_sync_obj_read);
249 }
250 if (entry->old_sync_obj_write) {
251 driver->sync_obj_unref(&entry->old_sync_obj_write);
252 }
253 } 236 }
254} 237}
255EXPORT_SYMBOL(ttm_eu_fence_buffer_objects); 238EXPORT_SYMBOL(ttm_eu_fence_buffer_objects);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index b8eb8cdcfb78..13afddc1f034 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -244,7 +244,7 @@ static void vmw_dummy_query_bo_prepare(struct vmw_private *dev_priv)
244 244
245 ttm_bo_reserve(bo, false, false, false, 0); 245 ttm_bo_reserve(bo, false, false, false, 0);
246 spin_lock(&bdev->fence_lock); 246 spin_lock(&bdev->fence_lock);
247 ret = ttm_bo_wait(bo, false, false, false, TTM_USAGE_READWRITE); 247 ret = ttm_bo_wait(bo, false, false, false);
248 spin_unlock(&bdev->fence_lock); 248 spin_unlock(&bdev->fence_lock);
249 if (unlikely(ret != 0)) 249 if (unlikely(ret != 0))
250 (void) vmw_fallback_wait(dev_priv, false, true, 0, false, 250 (void) vmw_fallback_wait(dev_priv, false, true, 0, false,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
index 28e1c35aec6f..40932fbdac0f 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
@@ -89,7 +89,6 @@ static int vmw_bo_to_validate_list(struct vmw_sw_context *sw_context,
89 if (unlikely(val_node == sw_context->cur_val_buf)) { 89 if (unlikely(val_node == sw_context->cur_val_buf)) {
90 val_buf->new_sync_obj_arg = NULL; 90 val_buf->new_sync_obj_arg = NULL;
91 val_buf->bo = ttm_bo_reference(bo); 91 val_buf->bo = ttm_bo_reference(bo);
92 val_buf->usage = TTM_USAGE_READWRITE;
93 list_add_tail(&val_buf->head, &sw_context->validate_nodes); 92 list_add_tail(&val_buf->head, &sw_context->validate_nodes);
94 ++sw_context->cur_val_buf; 93 ++sw_context->cur_val_buf;
95 } 94 }