From: Christian König <christian.koe...@amd.com>

If updating the PDs fails we now invalidate all entries to try again later.

Signed-off-by: Christian König <christian.koe...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 344f943..b877f9f3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1105,6 +1105,32 @@ static int amdgpu_vm_update_level(struct amdgpu_device 
*adev,
 }
 
 /*
+ * amdgpu_vm_invalidate_level - mark all PD levels as invalid
+ *
+ * @parent: parent PD
+ *
+ * Mark all PD level as invalid after an error.
+ */
+static void amdgpu_vm_invalidate_level(struct amdgpu_vm_pt *parent)
+{
+       unsigned pt_idx;
+
+       /*
+        * Recurse into the subdirectories. This recursion is harmless because
+        * we only have a maximum of 5 layers.
+        */
+       for (pt_idx = 0; pt_idx <= parent->last_entry_used; ++pt_idx) {
+               struct amdgpu_vm_pt *entry = &parent->entries[pt_idx];
+
+               if (!entry->bo)
+                       continue;
+
+               entry->addr = ~0ULL;
+               amdgpu_vm_invalidate_level(entry);
+       }
+}
+
+/*
  * amdgpu_vm_update_directories - make sure that all directories are valid
  *
  * @adev: amdgpu_device pointer
@@ -1116,7 +1142,13 @@ static int amdgpu_vm_update_level(struct amdgpu_device 
*adev,
 int amdgpu_vm_update_directories(struct amdgpu_device *adev,
                                 struct amdgpu_vm *vm)
 {
-       return amdgpu_vm_update_level(adev, vm, &vm->root, 0);
+       int r;
+
+       r = amdgpu_vm_update_level(adev, vm, &vm->root, 0);
+       if (r)
+               amdgpu_vm_invalidate_level(&vm->root);
+
+       return r;
 }
 
 /**
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to