lkml.org 
[lkml]   [2022]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.18 12/53] drm/vc4: crtc: Move the BO handling out of common page-flip callback
    Date
    From: Maxime Ripard <maxime@cerno.tech>

    [ Upstream commit 4d12c36fb73b5c49fe2f95d06515fd9846010fd2 ]

    We'll soon introduce another completion callback source that won't need
    to use the BO reference counting, so let's move it around to create a
    function we will be able to share between both callbacks.

    Reviewed-by: Melissa Wen <mwen@igalia.com>
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    Link: https://lore.kernel.org/r/20220610115149.964394-11-maxime@cerno.tech
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/vc4/vc4_crtc.c | 34 ++++++++++++++++++++--------------
    1 file changed, 20 insertions(+), 14 deletions(-)

    diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
    index 3669d7a06439..9956db71ad46 100644
    --- a/drivers/gpu/drm/vc4/vc4_crtc.c
    +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
    @@ -796,21 +796,8 @@ vc4_async_page_flip_complete(struct vc4_async_flip_state *flip_state)
    drm_crtc_vblank_put(crtc);
    drm_framebuffer_put(flip_state->fb);

    - /* Decrement the BO usecnt in order to keep the inc/dec calls balanced
    - * when the planes are updated through the async update path.
    - * FIXME: we should move to generic async-page-flip when it's
    - * available, so that we can get rid of this hand-made cleanup_fb()
    - * logic.
    - */
    - if (flip_state->old_fb) {
    - struct drm_gem_cma_object *cma_bo;
    - struct vc4_bo *bo;
    -
    - cma_bo = drm_fb_cma_get_gem_obj(flip_state->old_fb, 0);
    - bo = to_vc4_bo(&cma_bo->base);
    - vc4_bo_dec_usecnt(bo);
    + if (flip_state->old_fb)
    drm_framebuffer_put(flip_state->old_fb);
    - }

    kfree(flip_state);
    }
    @@ -819,8 +806,27 @@ static void vc4_async_page_flip_seqno_complete(struct vc4_seqno_cb *cb)
    {
    struct vc4_async_flip_state *flip_state =
    container_of(cb, struct vc4_async_flip_state, cb.seqno);
    + struct vc4_bo *bo = NULL;
    +
    + if (flip_state->old_fb) {
    + struct drm_gem_cma_object *cma_bo =
    + drm_fb_cma_get_gem_obj(flip_state->old_fb, 0);
    + bo = to_vc4_bo(&cma_bo->base);
    + }

    vc4_async_page_flip_complete(flip_state);
    +
    + /*
    + * Decrement the BO usecnt in order to keep the inc/dec
    + * calls balanced when the planes are updated through
    + * the async update path.
    + *
    + * FIXME: we should move to generic async-page-flip when
    + * it's available, so that we can get rid of this
    + * hand-made cleanup_fb() logic.
    + */
    + if (bo)
    + vc4_bo_dec_usecnt(bo);
    }

    /* Implements async (non-vblank-synced) page flips.
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-06-28 04:21    [W:4.137 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site