Mesa (main): radv/winsys: clear the PRT VA range when destroying a virtual BO

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 15 11:05:56 UTC 2021


Module: Mesa
Branch: main
Commit: a931d5a4a4d567e78d7e02b6fd506871c84a341d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a931d5a4a4d567e78d7e02b6fd506871c84a341d

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Dec  6 18:35:19 2021 +0100

radv/winsys: clear the PRT VA range when destroying a virtual BO

Instead of unmapping every range.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14116>

---

 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index 63002e27c9d..feaa4a4a305 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -358,8 +358,18 @@ radv_amdgpu_winsys_bo_destroy(struct radeon_winsys *_ws, struct radeon_winsys_bo
    radv_amdgpu_log_bo(ws, bo, true);
 
    if (bo->is_virtual) {
+      int r;
+
+      /* Clear mappings of this PRT VA region. */
+      r = radv_amdgpu_bo_va_op(ws, bo->bo, 0, bo->size, bo->base.va, 0, 0, AMDGPU_VA_OP_CLEAR);
+      if (r) {
+         fprintf(stderr, "amdgpu: Failed to clear a PRT VA region (%d).\n", r);
+      }
+
       for (uint32_t i = 0; i < bo->range_count; ++i) {
-         radv_amdgpu_winsys_virtual_unmap(ws, bo, bo->ranges + i);
+         const struct radv_amdgpu_map_range *range = bo->ranges + i;
+         if (range->bo)
+            ws->base.buffer_destroy(&ws->base, (struct radeon_winsys_bo *)range->bo);
       }
       free(bo->bos);
       free(bo->ranges);



More information about the mesa-commit mailing list