*/
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);
}