Commit 0479956c authored by Philip Yang's avatar Philip Yang Committed by Alex Deucher

drm/amdgpu: Rename vm invalidate lock to status_lock

The vm status_lock will be used to protect all vm status lists.
Signed-off-by: default avatarPhilip Yang <Philip.Yang@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 48c35c42
...@@ -225,9 +225,9 @@ static void amdgpu_vm_bo_idle(struct amdgpu_vm_bo_base *vm_bo) ...@@ -225,9 +225,9 @@ static void amdgpu_vm_bo_idle(struct amdgpu_vm_bo_base *vm_bo)
*/ */
static void amdgpu_vm_bo_invalidated(struct amdgpu_vm_bo_base *vm_bo) static void amdgpu_vm_bo_invalidated(struct amdgpu_vm_bo_base *vm_bo)
{ {
spin_lock(&vm_bo->vm->invalidated_lock); spin_lock(&vm_bo->vm->status_lock);
list_move(&vm_bo->vm_status, &vm_bo->vm->invalidated); list_move(&vm_bo->vm_status, &vm_bo->vm->invalidated);
spin_unlock(&vm_bo->vm->invalidated_lock); spin_unlock(&vm_bo->vm->status_lock);
} }
/** /**
...@@ -256,9 +256,9 @@ static void amdgpu_vm_bo_relocated(struct amdgpu_vm_bo_base *vm_bo) ...@@ -256,9 +256,9 @@ static void amdgpu_vm_bo_relocated(struct amdgpu_vm_bo_base *vm_bo)
*/ */
static void amdgpu_vm_bo_done(struct amdgpu_vm_bo_base *vm_bo) static void amdgpu_vm_bo_done(struct amdgpu_vm_bo_base *vm_bo)
{ {
spin_lock(&vm_bo->vm->invalidated_lock); spin_lock(&vm_bo->vm->status_lock);
list_move(&vm_bo->vm_status, &vm_bo->vm->done); list_move(&vm_bo->vm_status, &vm_bo->vm->done);
spin_unlock(&vm_bo->vm->invalidated_lock); spin_unlock(&vm_bo->vm->status_lock);
} }
/** /**
...@@ -936,7 +936,7 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem, ...@@ -936,7 +936,7 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,
amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
gtt_mem, cpu_mem); gtt_mem, cpu_mem);
} }
spin_lock(&vm->invalidated_lock); spin_lock(&vm->status_lock);
list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) { list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) {
if (!bo_va->base.bo) if (!bo_va->base.bo)
continue; continue;
...@@ -949,7 +949,7 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem, ...@@ -949,7 +949,7 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,
amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
gtt_mem, cpu_mem); gtt_mem, cpu_mem);
} }
spin_unlock(&vm->invalidated_lock); spin_unlock(&vm->status_lock);
} }
/** /**
* amdgpu_vm_bo_update - update all BO mappings in the vm page table * amdgpu_vm_bo_update - update all BO mappings in the vm page table
...@@ -1290,12 +1290,12 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev, ...@@ -1290,12 +1290,12 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
return r; return r;
} }
spin_lock(&vm->invalidated_lock); spin_lock(&vm->status_lock);
while (!list_empty(&vm->invalidated)) { while (!list_empty(&vm->invalidated)) {
bo_va = list_first_entry(&vm->invalidated, struct amdgpu_bo_va, bo_va = list_first_entry(&vm->invalidated, struct amdgpu_bo_va,
base.vm_status); base.vm_status);
resv = bo_va->base.bo->tbo.base.resv; resv = bo_va->base.bo->tbo.base.resv;
spin_unlock(&vm->invalidated_lock); spin_unlock(&vm->status_lock);
/* Try to reserve the BO to avoid clearing its ptes */ /* Try to reserve the BO to avoid clearing its ptes */
if (!amdgpu_vm_debug && dma_resv_trylock(resv)) if (!amdgpu_vm_debug && dma_resv_trylock(resv))
...@@ -1310,9 +1310,9 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev, ...@@ -1310,9 +1310,9 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
if (!clear) if (!clear)
dma_resv_unlock(resv); dma_resv_unlock(resv);
spin_lock(&vm->invalidated_lock); spin_lock(&vm->status_lock);
} }
spin_unlock(&vm->invalidated_lock); spin_unlock(&vm->status_lock);
return 0; return 0;
} }
...@@ -1763,9 +1763,9 @@ void amdgpu_vm_bo_del(struct amdgpu_device *adev, ...@@ -1763,9 +1763,9 @@ void amdgpu_vm_bo_del(struct amdgpu_device *adev,
} }
} }
spin_lock(&vm->invalidated_lock); spin_lock(&vm->status_lock);
list_del(&bo_va->base.vm_status); list_del(&bo_va->base.vm_status);
spin_unlock(&vm->invalidated_lock); spin_unlock(&vm->status_lock);
list_for_each_entry_safe(mapping, next, &bo_va->valids, list) { list_for_each_entry_safe(mapping, next, &bo_va->valids, list) {
list_del(&mapping->list); list_del(&mapping->list);
...@@ -2019,7 +2019,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm) ...@@ -2019,7 +2019,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
INIT_LIST_HEAD(&vm->moved); INIT_LIST_HEAD(&vm->moved);
INIT_LIST_HEAD(&vm->idle); INIT_LIST_HEAD(&vm->idle);
INIT_LIST_HEAD(&vm->invalidated); INIT_LIST_HEAD(&vm->invalidated);
spin_lock_init(&vm->invalidated_lock); spin_lock_init(&vm->status_lock);
INIT_LIST_HEAD(&vm->freed); INIT_LIST_HEAD(&vm->freed);
INIT_LIST_HEAD(&vm->done); INIT_LIST_HEAD(&vm->done);
...@@ -2584,7 +2584,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m) ...@@ -2584,7 +2584,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m)
id = 0; id = 0;
seq_puts(m, "\tInvalidated BOs:\n"); seq_puts(m, "\tInvalidated BOs:\n");
spin_lock(&vm->invalidated_lock); spin_lock(&vm->status_lock);
list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) { list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) {
if (!bo_va->base.bo) if (!bo_va->base.bo)
continue; continue;
...@@ -2599,7 +2599,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m) ...@@ -2599,7 +2599,7 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m)
continue; continue;
total_done += amdgpu_bo_print_info(id++, bo_va->base.bo, m); total_done += amdgpu_bo_print_info(id++, bo_va->base.bo, m);
} }
spin_unlock(&vm->invalidated_lock); spin_unlock(&vm->status_lock);
total_done_objs = id; total_done_objs = id;
seq_printf(m, "\tTotal idle size: %12lld\tobjs:\t%d\n", total_idle, seq_printf(m, "\tTotal idle size: %12lld\tobjs:\t%d\n", total_idle,
......
...@@ -254,6 +254,9 @@ struct amdgpu_vm { ...@@ -254,6 +254,9 @@ struct amdgpu_vm {
bool evicting; bool evicting;
unsigned int saved_flags; unsigned int saved_flags;
/* Lock to protect vm_bo add/del/move on all lists of vm */
spinlock_t status_lock;
/* BOs who needs a validation */ /* BOs who needs a validation */
struct list_head evicted; struct list_head evicted;
...@@ -268,7 +271,6 @@ struct amdgpu_vm { ...@@ -268,7 +271,6 @@ struct amdgpu_vm {
/* regular invalidated BOs, but not yet updated in the PT */ /* regular invalidated BOs, but not yet updated in the PT */
struct list_head invalidated; struct list_head invalidated;
spinlock_t invalidated_lock;
/* BO mappings freed, but not yet updated in the PT */ /* BO mappings freed, but not yet updated in the PT */
struct list_head freed; struct list_head freed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment