| From c73eef3268d69437dea4163991b76a8d405da203 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 28 Jan 2022 05:41:02 -0800 |
| Subject: drm/v3d: fix missing unlock |
| |
| From: Yongzhi Liu <lyz_cs@pku.edu.cn> |
| |
| [ Upstream commit e57c1a3bd5e8e0c7181f65ae55581f0236a8f284 ] |
| |
| [why] |
| Unlock is needed on the error handling path to prevent dead lock. |
| v3d_submit_cl_ioctl and v3d_submit_csd_ioctl is missing unlock. |
| |
| [how] |
| Fix this by changing goto target on the error handling path. So |
| changing the goto to target an error handling path |
| that includes drm_gem_unlock reservations. |
| |
| Signed-off-by: Yongzhi Liu <lyz_cs@pku.edu.cn> |
| Reviewed-by: Melissa Wen <mwen@igalia.com> |
| Signed-off-by: Melissa Wen <melissa.srw@gmail.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/1643377262-109975-1-git-send-email-lyz_cs@pku.edu.cn |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/v3d/v3d_gem.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c |
| index e47ae40a865a..91bdec3e0ef7 100644 |
| --- a/drivers/gpu/drm/v3d/v3d_gem.c |
| +++ b/drivers/gpu/drm/v3d/v3d_gem.c |
| @@ -798,7 +798,7 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data, |
| |
| if (!render->base.perfmon) { |
| ret = -ENOENT; |
| - goto fail; |
| + goto fail_perfmon; |
| } |
| } |
| |
| @@ -847,6 +847,7 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data, |
| |
| fail_unreserve: |
| mutex_unlock(&v3d->sched_lock); |
| +fail_perfmon: |
| drm_gem_unlock_reservations(last_job->bo, |
| last_job->bo_count, &acquire_ctx); |
| fail: |
| @@ -1027,7 +1028,7 @@ v3d_submit_csd_ioctl(struct drm_device *dev, void *data, |
| args->perfmon_id); |
| if (!job->base.perfmon) { |
| ret = -ENOENT; |
| - goto fail; |
| + goto fail_perfmon; |
| } |
| } |
| |
| @@ -1056,6 +1057,7 @@ v3d_submit_csd_ioctl(struct drm_device *dev, void *data, |
| |
| fail_unreserve: |
| mutex_unlock(&v3d->sched_lock); |
| +fail_perfmon: |
| drm_gem_unlock_reservations(clean_job->bo, clean_job->bo_count, |
| &acquire_ctx); |
| fail: |
| -- |
| 2.35.1 |
| |