diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_bo.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_gem.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cs.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo.c | 97 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo_util.c | 26 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo_vm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_execbuf_util.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 1 | ||||
-rw-r--r-- | include/drm/ttm/ttm_bo_api.h | 16 | ||||
-rw-r--r-- | include/drm/ttm/ttm_execbuf_util.h | 6 |
12 files changed, 40 insertions, 140 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 | ||
568 | retry: | 568 | retry: |
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 | ||
1700 | static 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 | |||
1740 | int ttm_bo_wait(struct ttm_buffer_object *bo, | 1697 | int 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 | } |
255 | EXPORT_SYMBOL(ttm_eu_fence_buffer_objects); | 238 | EXPORT_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 | } |
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index da957bf3fe44..42e346985186 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
@@ -44,11 +44,6 @@ struct ttm_bo_device; | |||
44 | 44 | ||
45 | struct drm_mm_node; | 45 | struct drm_mm_node; |
46 | 46 | ||
47 | enum ttm_buffer_usage { | ||
48 | TTM_USAGE_READ = 1, | ||
49 | TTM_USAGE_WRITE = 2, | ||
50 | TTM_USAGE_READWRITE = TTM_USAGE_READ | TTM_USAGE_WRITE | ||
51 | }; | ||
52 | 47 | ||
53 | /** | 48 | /** |
54 | * struct ttm_placement | 49 | * struct ttm_placement |
@@ -179,10 +174,7 @@ struct ttm_tt; | |||
179 | * the bo_device::lru_lock. | 174 | * the bo_device::lru_lock. |
180 | * @reserved: Deadlock-free lock used for synchronization state transitions. | 175 | * @reserved: Deadlock-free lock used for synchronization state transitions. |
181 | * @sync_obj_arg: Opaque argument to synchronization object function. | 176 | * @sync_obj_arg: Opaque argument to synchronization object function. |
182 | * @sync_obj: Pointer to a synchronization object of a last read or write, | 177 | * @sync_obj: Pointer to a synchronization object. |
183 | * whichever is later. | ||
184 | * @sync_obj_read: Pointer to a synchronization object of a last read. | ||
185 | * @sync_obj_write: Pointer to a synchronization object of a last write. | ||
186 | * @priv_flags: Flags describing buffer object internal state. | 178 | * @priv_flags: Flags describing buffer object internal state. |
187 | * @vm_rb: Rb node for the vm rb tree. | 179 | * @vm_rb: Rb node for the vm rb tree. |
188 | * @vm_node: Address space manager node. | 180 | * @vm_node: Address space manager node. |
@@ -266,8 +258,6 @@ struct ttm_buffer_object { | |||
266 | 258 | ||
267 | void *sync_obj_arg; | 259 | void *sync_obj_arg; |
268 | void *sync_obj; | 260 | void *sync_obj; |
269 | void *sync_obj_read; | ||
270 | void *sync_obj_write; | ||
271 | unsigned long priv_flags; | 261 | unsigned long priv_flags; |
272 | 262 | ||
273 | /** | 263 | /** |
@@ -335,7 +325,6 @@ ttm_bo_reference(struct ttm_buffer_object *bo) | |||
335 | * @bo: The buffer object. | 325 | * @bo: The buffer object. |
336 | * @interruptible: Use interruptible wait. | 326 | * @interruptible: Use interruptible wait. |
337 | * @no_wait: Return immediately if buffer is busy. | 327 | * @no_wait: Return immediately if buffer is busy. |
338 | * @usage: Whether to wait for the last read and/or the last write. | ||
339 | * | 328 | * |
340 | * This function must be called with the bo::mutex held, and makes | 329 | * This function must be called with the bo::mutex held, and makes |
341 | * sure any previous rendering to the buffer is completed. | 330 | * sure any previous rendering to the buffer is completed. |
@@ -345,8 +334,7 @@ ttm_bo_reference(struct ttm_buffer_object *bo) | |||
345 | * Returns -ERESTARTSYS if interrupted by a signal. | 334 | * Returns -ERESTARTSYS if interrupted by a signal. |
346 | */ | 335 | */ |
347 | extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy, | 336 | extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy, |
348 | bool interruptible, bool no_wait, | 337 | bool interruptible, bool no_wait); |
349 | enum ttm_buffer_usage usage); | ||
350 | /** | 338 | /** |
351 | * ttm_bo_validate | 339 | * ttm_bo_validate |
352 | * | 340 | * |
diff --git a/include/drm/ttm/ttm_execbuf_util.h b/include/drm/ttm/ttm_execbuf_util.h index 375f29902295..26cc7f9ffa41 100644 --- a/include/drm/ttm/ttm_execbuf_util.h +++ b/include/drm/ttm/ttm_execbuf_util.h | |||
@@ -41,26 +41,20 @@ | |||
41 | * @bo: refcounted buffer object pointer. | 41 | * @bo: refcounted buffer object pointer. |
42 | * @new_sync_obj_arg: New sync_obj_arg for @bo, to be used once | 42 | * @new_sync_obj_arg: New sync_obj_arg for @bo, to be used once |
43 | * adding a new sync object. | 43 | * adding a new sync object. |
44 | * @usage Indicates how @bo is used by the device. | ||
45 | * @reserved: Indicates whether @bo has been reserved for validation. | 44 | * @reserved: Indicates whether @bo has been reserved for validation. |
46 | * @removed: Indicates whether @bo has been removed from lru lists. | 45 | * @removed: Indicates whether @bo has been removed from lru lists. |
47 | * @put_count: Number of outstanding references on bo::list_kref. | 46 | * @put_count: Number of outstanding references on bo::list_kref. |
48 | * @old_sync_obj: Pointer to a sync object about to be unreferenced | 47 | * @old_sync_obj: Pointer to a sync object about to be unreferenced |
49 | * @old_sync_obj_read: Pointer to a read sync object about to be unreferenced. | ||
50 | * @old_sync_obj_write: Pointer to a write sync object about to be unreferenced. | ||
51 | */ | 48 | */ |
52 | 49 | ||
53 | struct ttm_validate_buffer { | 50 | struct ttm_validate_buffer { |
54 | struct list_head head; | 51 | struct list_head head; |
55 | struct ttm_buffer_object *bo; | 52 | struct ttm_buffer_object *bo; |
56 | void *new_sync_obj_arg; | 53 | void *new_sync_obj_arg; |
57 | enum ttm_buffer_usage usage; | ||
58 | bool reserved; | 54 | bool reserved; |
59 | bool removed; | 55 | bool removed; |
60 | int put_count; | 56 | int put_count; |
61 | void *old_sync_obj; | 57 | void *old_sync_obj; |
62 | void *old_sync_obj_read; | ||
63 | void *old_sync_obj_write; | ||
64 | }; | 58 | }; |
65 | 59 | ||
66 | /** | 60 | /** |