lkml.org 
[lkml]   [2017]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 044/108] drm/nouveau/fence/g84-: protect against concurrent access to semaphore buffers
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Ben Skeggs <bskeggs@redhat.com>


    [ Upstream commit 96692b097ba76d0c637ae8af47b29c73da33c9d0 ]

    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/nouveau/nouveau_fence.h | 1 +
    drivers/gpu/drm/nouveau/nv84_fence.c | 6 ++++++
    2 files changed, 7 insertions(+)

    --- a/drivers/gpu/drm/nouveau/nouveau_fence.h
    +++ b/drivers/gpu/drm/nouveau/nouveau_fence.h
    @@ -100,6 +100,7 @@ struct nv84_fence_priv {
    struct nouveau_bo *bo;
    struct nouveau_bo *bo_gart;
    u32 *suspend;
    + struct mutex mutex;
    };

    u64 nv84_fence_crtc(struct nouveau_channel *, int);
    --- a/drivers/gpu/drm/nouveau/nv84_fence.c
    +++ b/drivers/gpu/drm/nouveau/nv84_fence.c
    @@ -121,8 +121,10 @@ nv84_fence_context_del(struct nouveau_ch
    }

    nouveau_bo_wr32(priv->bo, chan->chid * 16 / 4, fctx->base.sequence);
    + mutex_lock(&priv->mutex);
    nouveau_bo_vma_del(priv->bo, &fctx->vma_gart);
    nouveau_bo_vma_del(priv->bo, &fctx->vma);
    + mutex_unlock(&priv->mutex);
    nouveau_fence_context_del(&fctx->base);
    chan->fence = NULL;
    nouveau_fence_context_free(&fctx->base);
    @@ -148,11 +150,13 @@ nv84_fence_context_new(struct nouveau_ch
    fctx->base.sync32 = nv84_fence_sync32;
    fctx->base.sequence = nv84_fence_read(chan);

    + mutex_lock(&priv->mutex);
    ret = nouveau_bo_vma_add(priv->bo, cli->vm, &fctx->vma);
    if (ret == 0) {
    ret = nouveau_bo_vma_add(priv->bo_gart, cli->vm,
    &fctx->vma_gart);
    }
    + mutex_unlock(&priv->mutex);

    /* map display semaphore buffers into channel's vm */
    for (i = 0; !ret && i < chan->drm->dev->mode_config.num_crtc; i++) {
    @@ -232,6 +236,8 @@ nv84_fence_create(struct nouveau_drm *dr
    priv->base.context_base = fence_context_alloc(priv->base.contexts);
    priv->base.uevent = true;

    + mutex_init(&priv->mutex);
    +
    /* Use VRAM if there is any ; otherwise fallback to system memory */
    domain = drm->device.info.ram_size != 0 ? TTM_PL_FLAG_VRAM :
    /*

    \
     
     \ /
      Last update: 2017-06-15 20:17    [W:4.115 / U:1.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site