lkml.org 
[lkml]   [2017]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 059/105] drm/msm: Put back the vaddr in submit_reloc()
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jordan Crouse <jcrouse@codeaurora.org>


    [ Upstream commit 6490abc4bc35fa4f3bdb9c7e49096943c50e29ea ]

    The error cases in submit_reloc() need to put back the virtual
    address of the bo before failling. Add a single failure path
    for the function.

    Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
    Signed-off-by: Rob Clark <robdclark@gmail.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/msm/msm_gem_submit.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    --- a/drivers/gpu/drm/msm/msm_gem_submit.c
    +++ b/drivers/gpu/drm/msm/msm_gem_submit.c
    @@ -290,7 +290,7 @@ static int submit_reloc(struct msm_gem_s
    {
    uint32_t i, last_offset = 0;
    uint32_t *ptr;
    - int ret;
    + int ret = 0;

    if (offset % 4) {
    DRM_ERROR("non-aligned cmdstream buffer: %u\n", offset);
    @@ -317,12 +317,13 @@ static int submit_reloc(struct msm_gem_s

    ret = copy_from_user(&submit_reloc, userptr, sizeof(submit_reloc));
    if (ret)
    - return -EFAULT;
    + goto out;

    if (submit_reloc.submit_offset % 4) {
    DRM_ERROR("non-aligned reloc offset: %u\n",
    submit_reloc.submit_offset);
    - return -EINVAL;
    + ret = -EINVAL;
    + goto out;
    }

    /* offset in dwords: */
    @@ -331,12 +332,13 @@ static int submit_reloc(struct msm_gem_s
    if ((off >= (obj->base.size / 4)) ||
    (off < last_offset)) {
    DRM_ERROR("invalid offset %u at reloc %u\n", off, i);
    - return -EINVAL;
    + ret = -EINVAL;
    + goto out;
    }

    ret = submit_bo(submit, submit_reloc.reloc_idx, NULL, &iova, &valid);
    if (ret)
    - return ret;
    + goto out;

    if (valid)
    continue;
    @@ -353,9 +355,10 @@ static int submit_reloc(struct msm_gem_s
    last_offset = off;
    }

    +out:
    msm_gem_put_vaddr_locked(&obj->base);

    - return 0;
    + return ret;
    }

    static void submit_cleanup(struct msm_gem_submit *submit)

    \
     
     \ /
      Last update: 2017-08-05 01:18    [W:2.361 / U:0.452 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site