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@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11128>
This commit is contained in:
Samuel Pitoiset 2021-06-04 15:35:35 +02:00 committed by Marge Bot
parent 20d8324a1b
commit b786c16365
4 changed files with 17 additions and 3 deletions

View file

@ -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();
}

View file

@ -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:

View file

@ -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;

View file

@ -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);