The code has been in a irq-disabled context since it is hard IRQ. There is no necessity to do it again.
Signed-off-by: Tian Tao tiantao6@hisilicon.com --- drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c index 3021370..b3e38e9 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c @@ -904,13 +904,12 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) tilcdc_clear_irqstatus(dev, stat);
if (stat & LCDC_END_OF_FRAME0) { - unsigned long flags; bool skip_event = false; ktime_t now;
now = ktime_get();
- spin_lock_irqsave(&tilcdc_crtc->irq_lock, flags); + spin_lock(&tilcdc_crtc->irq_lock);
tilcdc_crtc->last_vblank = now;
@@ -920,21 +919,21 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) skip_event = true; }
- spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, flags); + spin_unlock(&tilcdc_crtc->irq_lock);
drm_crtc_handle_vblank(crtc);
if (!skip_event) { struct drm_pending_vblank_event *event;
- spin_lock_irqsave(&dev->event_lock, flags); + spin_lock(&dev->event_lock);
event = tilcdc_crtc->event; tilcdc_crtc->event = NULL; if (event) drm_crtc_send_vblank_event(crtc, event);
- spin_unlock_irqrestore(&dev->event_lock, flags); + spin_unlock(&dev->event_lock); }
if (tilcdc_crtc->frame_intact)
On 2021-02-08 4:32, Tian Tao wrote:
The code has been in a irq-disabled context since it is hard IRQ. There is no necessity to do it again.
Signed-off-by: Tian Tao tiantao6@hisilicon.com
Reviewed-by: Jyri Sarha jyri.sarha@iki.fi Tested-by: Jyri Sarha jyri.sarha@iki.fi
I merge to this drm-misc-next soon.
Best regards, Jyri
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c index 3021370..b3e38e9 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c @@ -904,13 +904,12 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) tilcdc_clear_irqstatus(dev, stat);
if (stat & LCDC_END_OF_FRAME0) {
unsigned long flags;
bool skip_event = false; ktime_t now;
now = ktime_get();
spin_lock_irqsave(&tilcdc_crtc->irq_lock, flags);
spin_lock(&tilcdc_crtc->irq_lock);
tilcdc_crtc->last_vblank = now;
@@ -920,21 +919,21 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) skip_event = true; }
spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, flags);
spin_unlock(&tilcdc_crtc->irq_lock);
drm_crtc_handle_vblank(crtc);
if (!skip_event) { struct drm_pending_vblank_event *event;
spin_lock_irqsave(&dev->event_lock, flags);
spin_lock(&dev->event_lock); event = tilcdc_crtc->event; tilcdc_crtc->event = NULL; if (event) drm_crtc_send_vblank_event(crtc, event);
spin_unlock_irqrestore(&dev->event_lock, flags);
spin_unlock(&dev->event_lock);
}
if (tilcdc_crtc->frame_intact)
dri-devel@lists.freedesktop.org