mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-27 15:40:10 -04:00
drm/amdgpu: fix amdgpu_vm_bo_reset_state_machine
Can't splice the list but need to handle each entry individually.
Otherwise we run into issues after a GPU reset.
Fixes: 4cdbba5a16 ("drm/amdgpu: restructure VM state machine v4")
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Jesse Zhang <jesse.zhang@amd.com>
Tested-by: Jesse Zhang <jesse.zhang@amd.com>
Reviewed-by: Sunil Khatri <sunil.khatri@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
c9b2ad100b
commit
989bdec8ca
@@ -266,12 +266,23 @@ static void amdgpu_vm_bo_idle(struct amdgpu_vm_bo_base *vm_bo)
|
||||
*/
|
||||
static void amdgpu_vm_bo_reset_state_machine(struct amdgpu_vm *vm)
|
||||
{
|
||||
struct amdgpu_vm_bo_base *vm_bo, *tmp;
|
||||
|
||||
/*
|
||||
* Don't use list splice here, we need the special handling for the root
|
||||
* PD and set the moved flag appropriately.
|
||||
*/
|
||||
amdgpu_vm_assert_locked(vm);
|
||||
list_splice_init(&vm->kernel.idle, &vm->kernel.moved);
|
||||
list_splice_init(&vm->always_valid.idle, &vm->always_valid.moved);
|
||||
list_for_each_entry_safe(vm_bo, tmp, &vm->kernel.idle, vm_status)
|
||||
amdgpu_vm_bo_moved(vm_bo);
|
||||
list_for_each_entry_safe(vm_bo, tmp, &vm->always_valid.idle, vm_status)
|
||||
amdgpu_vm_bo_moved(vm_bo);
|
||||
|
||||
spin_lock(&vm->individual_lock);
|
||||
list_splice_init(&vm->individual.idle, &vm->individual.moved);
|
||||
list_for_each_entry_safe(vm_bo, tmp, &vm->individual.idle, vm_status) {
|
||||
vm_bo->moved = true;
|
||||
list_move(&vm_bo->vm_status, &vm->individual.moved);
|
||||
}
|
||||
spin_unlock(&vm->individual_lock);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user