]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/mediatek: Use spin_lock_irqsave() for CRTC event lock
authorFei Shao <fshao@chromium.org>
Wed, 28 Aug 2024 10:14:47 +0000 (18:14 +0800)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Thu, 29 Aug 2024 14:49:35 +0000 (14:49 +0000)
Use the state-aware spin_lock_irqsave() and spin_unlock_irqrestore()
to avoid unconditionally re-enabling the local interrupts.

Fixes: 411f5c1eacfe ("drm/mediatek: handle events when enabling/disabling crtc")
Signed-off-by: Fei Shao <fshao@chromium.org>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20240828101511.3269822-1-fshao@chromium.org/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_crtc.c

index 67012cb66f0a7553f5e010d9a0a5e78e2b6e37f0..175b00e5a25354c890d5617912a7b3af0ac96ddc 100644 (file)
@@ -429,6 +429,7 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_crtc *mtk_crtc)
 {
        struct drm_device *drm = mtk_crtc->base.dev;
        struct drm_crtc *crtc = &mtk_crtc->base;
+       unsigned long flags;
        int i;
 
        for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) {
@@ -460,10 +461,10 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_crtc *mtk_crtc)
        pm_runtime_put(drm->dev);
 
        if (crtc->state->event && !crtc->state->active) {
-               spin_lock_irq(&crtc->dev->event_lock);
+               spin_lock_irqsave(&crtc->dev->event_lock, flags);
                drm_crtc_send_vblank_event(crtc, crtc->state->event);
                crtc->state->event = NULL;
-               spin_unlock_irq(&crtc->dev->event_lock);
+               spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
        }
 }