]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/gpu/drm/drm_atomic_helper.c
drm/atomic-helper: check that drivers call drm_crtc_vblank_off
[mirror_ubuntu-bionic-kernel.git] / drivers / gpu / drm / drm_atomic_helper.c
index 3472d9ae8b956f8699823852ecd6f258dc54dd9d..27dc6838533ab7529f86069830a2cc97aa71c471 100644 (file)
@@ -860,6 +860,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
 
        for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
                const struct drm_crtc_helper_funcs *funcs;
+               int ret;
 
                /* Shut down everything that needs a full modeset. */
                if (!drm_atomic_crtc_needs_modeset(new_crtc_state))
@@ -883,6 +884,14 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
                        funcs->disable(crtc);
                else
                        funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
+
+               if (!(dev->irq_enabled && dev->num_crtcs))
+                       continue;
+
+               ret = drm_crtc_vblank_get(crtc);
+               WARN_ONCE(ret != -EINVAL, "driver forgot to call drm_crtc_vblank_off()\n");
+               if (ret == 0)
+                       drm_crtc_vblank_put(crtc);
        }
 }