Skip to content

Commit 82faa32

Browse files
committed
drm/vc4: kms: Remove async modeset semaphore
Now that we have proper ordering guaranteed by the previous patch, the semaphore is redundant and can be removed. Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20201204151138.1739736-7-maxime@cerno.tech
1 parent 03b03ef commit 82faa32

File tree

3 files changed

+2
-37
lines changed

3 files changed

+2
-37
lines changed

drivers/gpu/drm/vc4/vc4_crtc.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,6 @@ vc4_async_page_flip_complete(struct vc4_seqno_cb *cb)
697697
container_of(cb, struct vc4_async_flip_state, cb);
698698
struct drm_crtc *crtc = flip_state->crtc;
699699
struct drm_device *dev = crtc->dev;
700-
struct vc4_dev *vc4 = to_vc4_dev(dev);
701700
struct drm_plane *plane = crtc->primary;
702701

703702
vc4_plane_async_set_fb(plane, flip_state->fb);
@@ -729,8 +728,6 @@ vc4_async_page_flip_complete(struct vc4_seqno_cb *cb)
729728
}
730729

731730
kfree(flip_state);
732-
733-
up(&vc4->async_modeset);
734731
}
735732

736733
/* Implements async (non-vblank-synced) page flips.
@@ -745,7 +742,6 @@ static int vc4_async_page_flip(struct drm_crtc *crtc,
745742
uint32_t flags)
746743
{
747744
struct drm_device *dev = crtc->dev;
748-
struct vc4_dev *vc4 = to_vc4_dev(dev);
749745
struct drm_plane *plane = crtc->primary;
750746
int ret = 0;
751747
struct vc4_async_flip_state *flip_state;
@@ -774,15 +770,6 @@ static int vc4_async_page_flip(struct drm_crtc *crtc,
774770
flip_state->crtc = crtc;
775771
flip_state->event = event;
776772

777-
/* Make sure all other async modesetes have landed. */
778-
ret = down_interruptible(&vc4->async_modeset);
779-
if (ret) {
780-
drm_framebuffer_put(fb);
781-
vc4_bo_dec_usecnt(bo);
782-
kfree(flip_state);
783-
return ret;
784-
}
785-
786773
/* Save the current FB before it's replaced by the new one in
787774
* drm_atomic_set_fb_for_plane(). We'll need the old FB in
788775
* vc4_async_page_flip_complete() to decrement the BO usecnt and keep

drivers/gpu/drm/vc4/vc4_drv.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,6 @@ struct vc4_dev {
214214
struct work_struct reset_work;
215215
} hangcheck;
216216

217-
struct semaphore async_modeset;
218-
219217
struct drm_modeset_lock ctm_state_lock;
220218
struct drm_private_obj ctm_manager;
221219
struct drm_private_obj hvs_channels;

drivers/gpu/drm/vc4/vc4_kms.c

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -418,8 +418,6 @@ vc4_atomic_complete_commit(struct drm_atomic_state *state)
418418
clk_set_min_rate(hvs->core_clk, 0);
419419

420420
drm_atomic_state_put(state);
421-
422-
up(&vc4->async_modeset);
423421
}
424422

425423
static void commit_work(struct work_struct *work)
@@ -477,26 +475,17 @@ static int vc4_atomic_commit(struct drm_device *dev,
477475
struct drm_atomic_state *state,
478476
bool nonblock)
479477
{
480-
struct vc4_dev *vc4 = to_vc4_dev(dev);
481478
int ret;
482479

483480
if (state->async_update) {
484-
ret = down_interruptible(&vc4->async_modeset);
485-
if (ret)
486-
return ret;
487-
488481
ret = drm_atomic_helper_prepare_planes(dev, state);
489-
if (ret) {
490-
up(&vc4->async_modeset);
482+
if (ret)
491483
return ret;
492-
}
493484

494485
drm_atomic_helper_async_commit(dev, state);
495486

496487
drm_atomic_helper_cleanup_planes(dev, state);
497488

498-
up(&vc4->async_modeset);
499-
500489
return 0;
501490
}
502491

@@ -512,21 +501,14 @@ static int vc4_atomic_commit(struct drm_device *dev,
512501

513502
INIT_WORK(&state->commit_work, commit_work);
514503

515-
ret = down_interruptible(&vc4->async_modeset);
516-
if (ret)
517-
return ret;
518-
519504
ret = drm_atomic_helper_prepare_planes(dev, state);
520-
if (ret) {
521-
up(&vc4->async_modeset);
505+
if (ret)
522506
return ret;
523-
}
524507

525508
if (!nonblock) {
526509
ret = drm_atomic_helper_wait_for_fences(dev, state, true);
527510
if (ret) {
528511
drm_atomic_helper_cleanup_planes(dev, state);
529-
up(&vc4->async_modeset);
530512
return ret;
531513
}
532514
}
@@ -1008,8 +990,6 @@ int vc4_kms_load(struct drm_device *dev)
1008990
vc4->load_tracker_enabled = true;
1009991
}
1010992

1011-
sema_init(&vc4->async_modeset, 1);
1012-
1013993
/* Set support for vblank irq fast disable, before drm_vblank_init() */
1014994
dev->vblank_disable_immediate = true;
1015995

0 commit comments

Comments
 (0)