Skip to content

Commit

Permalink
drm/amdgpu: minor optimize VM moved handling v2
Browse files Browse the repository at this point in the history
Try to lock moved BOs if it's successful we can update the
PTEs directly to the new location.

v2: rebase

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Christian König authored and Alex Deucher committed Jan 10, 2018
1 parent 4d4358f commit ec363e0
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1697,18 +1697,31 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
spin_lock(&vm->status_lock);
while (!list_empty(&vm->moved)) {
struct amdgpu_bo_va *bo_va;
struct reservation_object *resv;

bo_va = list_first_entry(&vm->moved,
struct amdgpu_bo_va, base.vm_status);
spin_unlock(&vm->status_lock);

resv = bo_va->base.bo->tbo.resv;

/* Per VM BOs never need to bo cleared in the page tables */
clear = bo_va->base.bo->tbo.resv != vm->root.base.bo->tbo.resv;
if (resv == vm->root.base.bo->tbo.resv)
clear = false;
/* Try to reserve the BO to avoid clearing its ptes */
else if (reservation_object_trylock(resv))
clear = false;
/* Somebody else is using the BO right now */
else
clear = true;

r = amdgpu_vm_bo_update(adev, bo_va, clear);
if (r)
return r;

if (!clear && resv != vm->root.base.bo->tbo.resv)
reservation_object_unlock(resv);

spin_lock(&vm->status_lock);
}
spin_unlock(&vm->status_lock);
Expand Down

0 comments on commit ec363e0

Please sign in to comment.