diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2015-01-13 10:14:53 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2015-03-20 15:30:18 +0300 |
commit | 5dbe44336811a7e8ef4c958c6ac054772ee47637 (patch) | |
tree | 078bba27e553bece4fac23010bf4b3c6df5c51f4 /drivers/gpu | |
parent | 82e58855bc4f8442145cb2037e164a4b1f5cf854 (diff) | |
download | linux-5dbe44336811a7e8ef4c958c6ac054772ee47637.tar.xz |
drm: omapdrm: Fix race condition between GO and vblank IRQ
The vblank interrupt is used by the driver as a completion signal when
applying new settings.
A race condition exist between enabling the vblank interrupt and
applying new settings to the hardware by setting the GO bit. If a vblank
interrupt occurs in-between, the driver will incorrectly consider the
new settings to be applied. Fix this by enabling the interrupt after
setting the GO bit.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_crtc.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c index c7d3e1eec6cb..3f811186c891 100644 --- a/drivers/gpu/drm/omapdrm/omap_crtc.c +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c @@ -501,8 +501,8 @@ static void apply_worker(struct work_struct *work) DBG("%s: GO", omap_crtc->name); if (dispc_mgr_is_enabled(channel)) { - omap_irq_register(dev, &omap_crtc->apply_irq); dispc_mgr_go(channel); + omap_irq_register(dev, &omap_crtc->apply_irq); } else { struct omap_drm_private *priv = dev->dev_private; queue_work(priv->wq, &omap_crtc->apply_work); |