aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 83b7ce6f5f72..5848564d3d66 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -627,9 +627,14 @@ static int amdgpu_vm_update_ptes(struct amdgpu_device *adev,
627{ 627{
628 uint64_t mask = AMDGPU_VM_PTE_COUNT - 1; 628 uint64_t mask = AMDGPU_VM_PTE_COUNT - 1;
629 uint64_t last_pte = ~0, last_dst = ~0; 629 uint64_t last_pte = ~0, last_dst = ~0;
630 void *owner = AMDGPU_FENCE_OWNER_VM;
630 unsigned count = 0; 631 unsigned count = 0;
631 uint64_t addr; 632 uint64_t addr;
632 633
634 /* sync to everything on unmapping */
635 if (!(flags & AMDGPU_PTE_VALID))
636 owner = AMDGPU_FENCE_OWNER_UNDEFINED;
637
633 /* walk over the address space and update the page tables */ 638 /* walk over the address space and update the page tables */
634 for (addr = start; addr < end; ) { 639 for (addr = start; addr < end; ) {
635 uint64_t pt_idx = addr >> amdgpu_vm_block_size; 640 uint64_t pt_idx = addr >> amdgpu_vm_block_size;
@@ -638,8 +643,7 @@ static int amdgpu_vm_update_ptes(struct amdgpu_device *adev,
638 uint64_t pte; 643 uint64_t pte;
639 int r; 644 int r;
640 645
641 amdgpu_sync_resv(adev, &ib->sync, pt->tbo.resv, 646 amdgpu_sync_resv(adev, &ib->sync, pt->tbo.resv, owner);
642 AMDGPU_FENCE_OWNER_VM);
643 r = reservation_object_reserve_shared(pt->tbo.resv); 647 r = reservation_object_reserve_shared(pt->tbo.resv);
644 if (r) 648 if (r)
645 return r; 649 return r;
@@ -790,17 +794,6 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
790 794
791 ib->length_dw = 0; 795 ib->length_dw = 0;
792 796
793 if (!(flags & AMDGPU_PTE_VALID)) {
794 unsigned i;
795
796 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
797 struct amdgpu_fence *f = vm->ids[i].last_id_use;
798 r = amdgpu_sync_fence(adev, &ib->sync, &f->base);
799 if (r)
800 return r;
801 }
802 }
803
804 r = amdgpu_vm_update_ptes(adev, vm, ib, mapping->it.start, 797 r = amdgpu_vm_update_ptes(adev, vm, ib, mapping->it.start,
805 mapping->it.last + 1, addr + mapping->offset, 798 mapping->it.last + 1, addr + mapping->offset,
806 flags, gtt_flags); 799 flags, gtt_flags);