lkml.org 
[lkml]   [2014]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13 090/120] drm/nouveau: hold mutex while syncing to kernel channel
    Date
    3.13-stable review patch.  If anyone has any objections, please let me know.

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

    From: Maarten Lankhorst <maarten.lankhorst@canonical.com>

    commit d5c1e84b3a130f0743b218b33ff7d9cb493ab5b4 upstream.

    Not holding the mutex potentially causes corruption of the kernel
    channel when page flipping.

    Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/nouveau/nouveau_display.c | 15 ++++++++-------
    1 file changed, 8 insertions(+), 7 deletions(-)

    --- a/drivers/gpu/drm/nouveau/nouveau_display.c
    +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
    @@ -603,6 +603,14 @@ nouveau_crtc_page_flip(struct drm_crtc *
    if (!s)
    return -ENOMEM;

    + if (new_bo != old_bo) {
    + ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM);
    + if (ret)
    + goto fail_free;
    + }
    +
    + mutex_lock(&chan->cli->mutex);
    +
    /* synchronise rendering channel with the kernel's channel */
    spin_lock(&new_bo->bo.bdev->fence_lock);
    fence = nouveau_fence_ref(new_bo->bo.sync_obj);
    @@ -612,13 +620,6 @@ nouveau_crtc_page_flip(struct drm_crtc *
    if (ret)
    goto fail_free;

    - if (new_bo != old_bo) {
    - ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM);
    - if (ret)
    - goto fail_free;
    - }
    -
    - mutex_lock(&chan->cli->mutex);
    ret = ttm_bo_reserve(&old_bo->bo, true, false, false, NULL);
    if (ret)
    goto fail_unpin;



    \
     
     \ /
      Last update: 2014-02-11 22:01    [W:3.113 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site