lkml.org 
[lkml]   [2022]   [Apr]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 046/343] drm/v3d: fix missing unlock
    Date
    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 c7ed2e1cbab6..92bc0faee84f 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


    \
     
     \ /
      Last update: 2022-04-12 10:43    [W:4.028 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site