lkml.org 
[lkml]   [2013]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 127/212] drm/ttm: Fix ttm_bo_move_memcpy
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

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

    From: Thomas Hellstrom <thellstrom@vmware.com>

    commit da95c788ef0c645378ffccb7060a0df1a33aee38 upstream.

    All error paths will want to keep the mm node, so handle this at the
    function exit. This fixes an ioremap failure error path.
    Also add some comments to make the function a bit easier to understand.

    Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
    Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/ttm/ttm_bo_util.c | 28 +++++++++++++++++-----------
    1 file changed, 17 insertions(+), 11 deletions(-)

    --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
    +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
    @@ -343,21 +343,25 @@ int ttm_bo_move_memcpy(struct ttm_buffer
    if (ret)
    goto out;

    + /*
    + * Single TTM move. NOP.
    + */
    if (old_iomap == NULL && new_iomap == NULL)
    goto out2;
    +
    + /*
    + * Move nonexistent data. NOP.
    + */
    if (old_iomap == NULL && ttm == NULL)
    goto out2;

    - /* TTM might be null for moves within the same region.
    + /*
    + * TTM might be null for moves within the same region.
    */
    if (ttm && ttm->state == tt_unpopulated) {
    ret = ttm->bdev->driver->ttm_tt_populate(ttm);
    - if (ret) {
    - /* if we fail here don't nuke the mm node
    - * as the bo still owns it */
    - old_copy.mm_node = NULL;
    + if (ret)
    goto out1;
    - }
    }

    add = 0;
    @@ -383,11 +387,8 @@ int ttm_bo_move_memcpy(struct ttm_buffer
    prot);
    } else
    ret = ttm_copy_io_page(new_iomap, old_iomap, page);
    - if (ret) {
    - /* failing here, means keep old copy as-is */
    - old_copy.mm_node = NULL;
    + if (ret)
    goto out1;
    - }
    }
    mb();
    out2:
    @@ -405,7 +406,12 @@ out1:
    ttm_mem_reg_iounmap(bdev, old_mem, new_iomap);
    out:
    ttm_mem_reg_iounmap(bdev, &old_copy, old_iomap);
    - ttm_bo_mem_put(bo, &old_copy);
    +
    + /*
    + * On error, keep the mm node!
    + */
    + if (!ret)
    + ttm_bo_mem_put(bo, &old_copy);
    return ret;
    }
    EXPORT_SYMBOL(ttm_bo_move_memcpy);



    \
     
     \ /
      Last update: 2013-12-02 21:21    [W:4.098 / U:0.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site