]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
drm/amdgpu: clear freed mappings immediately when BO may be freed
[karo-tx-linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_gem.c
index 7a37b93a0dfd3f6083e4cd7ece15d6ca3ac21daa..f85520d4e7111cb8386e17cba003a84fef7f8d9e 100644 (file)
@@ -152,6 +152,7 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj,
        struct ttm_validate_buffer tv;
        struct ww_acquire_ctx ticket;
        struct amdgpu_bo_va *bo_va;
+       struct dma_fence *fence = NULL;
        int r;
 
        INIT_LIST_HEAD(&list);
@@ -173,6 +174,17 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj,
        if (bo_va) {
                if (--bo_va->ref_count == 0) {
                        amdgpu_vm_bo_rmv(adev, bo_va);
+
+                       r = amdgpu_vm_clear_freed(adev, vm, &fence);
+                       if (unlikely(r)) {
+                               dev_err(adev->dev, "failed to clear page "
+                                       "tables on GEM object close (%d)\n", r);
+                       }
+
+                       if (fence) {
+                               amdgpu_bo_fence(bo, fence, true);
+                               dma_fence_put(fence);
+                       }
                }
        }
        ttm_eu_backoff_reservation(&ticket, &list);