[Intel-gfx] [PATCH 4/5] drm: Allow reenabling of vblank interrupts even if refcount>0

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Fri Feb 21 20:03:34 CET 2014


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

If someone holds a vblank reference across the modeset, and after/during
the modeset someone tries to grab a vblank reference, the current code
won't re-enable the vblank interrupts. That's not good, so instead allow
the driver to choose whether drm_vblank_get() should always enable the
interrupts regardless of the refcount.

Combined with the drm_vblank_off/drm_vblank_on reject mechanism, this
can also be used to allow drivers to use vblank interrupts during
modeset, whether or not someone is currently holding a vblank reference.

Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/drm_irq.c | 3 ++-
 include/drm/drmP.h        | 6 ++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 6e5d820..d613b6f 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -897,7 +897,8 @@ int drm_vblank_get(struct drm_device *dev, int crtc)
 	}
 
 	/* Going from 0->1 means we have to enable interrupts again */
-	if (atomic_add_return(1, &dev->vblank[crtc].refcount) == 1) {
+	if (atomic_add_return(1, &dev->vblank[crtc].refcount) == 1 ||
+	    dev->vblank_always_enable_on_get) {
 		spin_lock(&dev->vblank_time_lock);
 		if (!dev->vblank[crtc].enabled) {
 			/* Enable vblank irqs under vblank_time_lock protection.
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index ee40483..3eca0ee 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1156,6 +1156,12 @@ struct drm_device {
 	 */
 	bool vblank_disable_allowed;
 
+	/*
+	 * Should a non-rejected drm_vblank_get() always enable the
+	 * vblank interrupt regardless of the current refcount?
+	 */
+	bool vblank_always_enable_on_get;
+
 	/* array of size num_crtcs */
 	struct drm_vblank_crtc *vblank;
 
-- 
1.8.3.2




More information about the Intel-gfx mailing list