Mesa (main): radv/winsys: allow to reserve a VMID

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 4 15:09:03 UTC 2021


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Jun  4 15:35:35 2021 +0200

radv/winsys: allow to reserve a VMID

This will be used by SPM and also for configuring the trap handler.

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/11128>

---

 src/amd/vulkan/radv_device.c                             |  2 +-
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c        | 14 +++++++++++++-
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h        |  1 +
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h |  3 ++-
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 19b9becdd27..055bbced9a2 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -589,7 +589,7 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm
    device->ws = radv_null_winsys_create();
 #else
    if (drm_device) {
-      device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags, instance->perftest_flags);
+      device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags, instance->perftest_flags, false);
    } else {
       device->ws = radv_null_winsys_create();
    }
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
index 11cf51a0c86..beb237b21b1 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
@@ -170,6 +170,9 @@ radv_amdgpu_winsys_destroy(struct radeon_winsys *rws)
    u_rwlock_destroy(&ws->global_bo_list.lock);
    free(ws->global_bo_list.bos);
 
+   if (ws->reserve_vmid)
+      amdgpu_vm_unreserve_vmid(ws->dev, 0);
+
    pthread_mutex_destroy(&ws->syncobj_lock);
    u_rwlock_destroy(&ws->log_bo_list_lock);
    ac_addrlib_destroy(ws->addrlib);
@@ -178,7 +181,7 @@ radv_amdgpu_winsys_destroy(struct radeon_winsys *rws)
 }
 
 struct radeon_winsys *
-radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
+radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags, bool reserve_vmid)
 {
    uint32_t drm_major, drm_minor, r;
    amdgpu_device_handle dev;
@@ -223,6 +226,13 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
    if (debug_flags & RADV_DEBUG_NO_IBS)
       ws->use_ib_bos = false;
 
+   ws->reserve_vmid = reserve_vmid;
+   if (ws->reserve_vmid) {
+      r = amdgpu_vm_reserve_vmid(dev, 0);
+      if (r)
+         goto vmid_fail;
+   }
+
    ws->perftest = perftest_flags;
    ws->zero_all_vram_allocs = debug_flags & RADV_DEBUG_ZERO_VRAM;
    u_rwlock_init(&ws->global_bo_list.lock);
@@ -243,6 +253,8 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
 
    return &ws->base;
 
+vmid_fail:
+   ac_addrlib_destroy(ws->addrlib);
 winsys_fail:
    free(ws);
 fail:
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
index 0739f246d1d..06ca90564f0 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
@@ -47,6 +47,7 @@ struct radv_amdgpu_winsys {
    bool debug_log_bos;
    bool use_ib_bos;
    bool zero_all_vram_allocs;
+   bool reserve_vmid;
    uint64_t perftest;
 
    uint64_t allocated_vram;
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
index 84fe347ec3e..47c18f373c2 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
@@ -30,7 +30,8 @@
 #define RADV_AMDGPU_WINSYS_PUBLIC_H
 
 struct radeon_winsys *radv_amdgpu_winsys_create(int fd, uint64_t debug_flags,
-                                                uint64_t perftest_flags);
+                                                uint64_t perftest_flags,
+                                                bool reserve_vmid);
 
 struct radeon_winsys *radv_dummy_winsys_create(void);
 



More information about the mesa-commit mailing list