From: Ville Syrjälä <ville.syrj...@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.syrj...@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

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to