| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- From e2b51ac3278847aa79089b4a1b94b8d762af0052 Mon Sep 17 00:00:00 2001
- From: Maxime Ripard <[email protected]>
- Date: Mon, 2 May 2022 15:25:20 +0200
- Subject: [PATCH] drm/vc4: crtc: Move the BO handling out of common
- page-flip callback
- 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.
- Signed-off-by: Maxime Ripard <[email protected]>
- ---
- drivers/gpu/drm/vc4/vc4_crtc.c | 34 ++++++++++++++++++++--------------
- 1 file changed, 20 insertions(+), 14 deletions(-)
- --- a/drivers/gpu/drm/vc4/vc4_crtc.c
- +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
- @@ -830,21 +830,8 @@ vc4_async_page_flip_complete(struct vc4_
- 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);
- }
- @@ -853,8 +840,27 @@ static void vc4_async_page_flip_seqno_co
- {
- 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);
- }
-
- static void vc4_async_page_flip_fence_complete(struct dma_fence *fence,
|