mirror of
https://github.com/torvalds/linux.git
synced 2026-05-13 00:28:54 +02:00
drm/msm/vma: Avoid lock in VM_BIND fence signaling path
Use msm_gem_unpin_active(), similar to what is used in the GEM_SUBMIT
path. This avoids needing to hold the obj lock, and the end result is
the same. (As with GEM_SUBMIT, we know the fence isn't signaled yet.)
Reported-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
Fixes: 2e6a8a1fe2 ("drm/msm: Add VM_BIND ioctl")
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/712230/
Message-ID: <20260316184442.673558-1-robin.clark@oss.qualcomm.com>
This commit is contained in:
parent
9d24ec3276
commit
8a7023b035
|
|
@ -507,8 +507,11 @@ void msm_gem_unpin_locked(struct drm_gem_object *obj)
|
|||
*/
|
||||
void msm_gem_unpin_active(struct drm_gem_object *obj)
|
||||
{
|
||||
struct msm_drm_private *priv = obj->dev->dev_private;
|
||||
struct msm_gem_object *msm_obj = to_msm_bo(obj);
|
||||
|
||||
GEM_WARN_ON(!mutex_is_locked(&priv->lru.lock));
|
||||
|
||||
msm_obj->pin_count--;
|
||||
GEM_WARN_ON(msm_obj->pin_count < 0);
|
||||
update_lru_active(obj);
|
||||
|
|
|
|||
|
|
@ -696,6 +696,7 @@ static struct dma_fence *
|
|||
msm_vma_job_run(struct drm_sched_job *_job)
|
||||
{
|
||||
struct msm_vm_bind_job *job = to_msm_vm_bind_job(_job);
|
||||
struct msm_drm_private *priv = job->vm->drm->dev_private;
|
||||
struct msm_gem_vm *vm = to_msm_vm(job->vm);
|
||||
struct drm_gem_object *obj;
|
||||
int ret = vm->unusable ? -EINVAL : 0;
|
||||
|
|
@ -738,12 +739,14 @@ msm_vma_job_run(struct drm_sched_job *_job)
|
|||
if (ret)
|
||||
msm_gem_vm_unusable(job->vm);
|
||||
|
||||
mutex_lock(&priv->lru.lock);
|
||||
|
||||
job_foreach_bo (obj, job) {
|
||||
msm_gem_lock(obj);
|
||||
msm_gem_unpin_locked(obj);
|
||||
msm_gem_unlock(obj);
|
||||
msm_gem_unpin_active(obj);
|
||||
}
|
||||
|
||||
mutex_unlock(&priv->lru.lock);
|
||||
|
||||
/* VM_BIND ops are synchronous, so no fence to wait on: */
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user