I have also observed the same issue during reset and the patch is fixing it.

Reviewed-by: Sunil Khatri <[email protected]>

Regards
Sunil Khatri


On 22-05-2026 03:01 pm, Christian König wrote:
Can't splice the list but need to handle each entry individually.

Otherwise we run into issues after a GPU reset.

Signed-off-by: Christian König<[email protected]>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 17 ++++++++++++++---
  1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index b523a7b97d6f..e91504f04d97 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -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);
  }
  

Reply via email to