This helper can validate the userq whether is ative prior to the userq VA GEM unmap.
Signed-off-by: Prike Liang <prike.li...@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 13 +++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c index 1c58ddbd654f..e43a61f64755 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c @@ -1152,3 +1152,16 @@ int amdgpu_userq_start_sched_for_enforce_isolation(struct amdgpu_device *adev, mutex_unlock(&adev->userq_mutex); return ret; } + +int amdgpu_userq_gem_va_unmap_wait(struct amdgpu_vm *vm) +{ + struct amdgpu_fpriv *fpriv = vm_to_fpriv(vm); + struct amdgpu_userq_mgr *uq_mgr = &fpriv->userq_mgr; + + if (vm->is_userq_context && &fpriv->vm == vm) { + dev_dbg(uq_mgr->adev->dev, "try to unmap an userq by gem va ioctl\n"); + return amdgpu_userq_wait_for_signal(uq_mgr); + } + + return 0; +} diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h index 65f9bd91ac73..ea1b631331c9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h @@ -31,6 +31,7 @@ #define to_ev_fence(f) container_of(f, struct amdgpu_eviction_fence, base) #define uq_mgr_to_fpriv(u) container_of(u, struct amdgpu_fpriv, userq_mgr) #define work_to_uq_mgr(w, name) container_of(w, struct amdgpu_userq_mgr, name) +#define vm_to_fpriv(v) container_of(v, struct amdgpu_fpriv, vm) enum amdgpu_userq_state { AMDGPU_USERQ_STATE_UNMAPPED = 0, @@ -145,4 +146,5 @@ bool amdgpu_userq_buffer_vas_mapped(struct amdgpu_vm *vm, int amdgpu_userq_buffer_va_put(struct amdgpu_vm *vm, u64 addr); int amdgpu_userq_buffer_vas_put(struct amdgpu_vm *vm, struct amdgpu_usermode_queue *queue); +int amdgpu_userq_gem_va_unmap_wait(struct amdgpu_vm *vm); #endif -- 2.34.1