|
@@ -1316,7 +1316,13 @@ void drm_vblank_off(struct drm_device *dev, unsigned int pipe)
|
|
|
spin_lock_irqsave(&dev->event_lock, irqflags);
|
|
|
|
|
|
spin_lock(&dev->vbl_lock);
|
|
|
- vblank_disable_and_save(dev, pipe);
|
|
|
+ DRM_DEBUG_VBL("crtc %d, vblank enabled %d, inmodeset %d\n",
|
|
|
+ pipe, vblank->enabled, vblank->inmodeset);
|
|
|
+
|
|
|
+ /* Avoid redundant vblank disables without previous drm_vblank_on(). */
|
|
|
+ if (drm_core_check_feature(dev, DRIVER_ATOMIC) || !vblank->inmodeset)
|
|
|
+ vblank_disable_and_save(dev, pipe);
|
|
|
+
|
|
|
wake_up(&vblank->queue);
|
|
|
|
|
|
/*
|
|
@@ -1418,6 +1424,9 @@ void drm_vblank_on(struct drm_device *dev, unsigned int pipe)
|
|
|
return;
|
|
|
|
|
|
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
|
|
+ DRM_DEBUG_VBL("crtc %d, vblank enabled %d, inmodeset %d\n",
|
|
|
+ pipe, vblank->enabled, vblank->inmodeset);
|
|
|
+
|
|
|
/* Drop our private "prevent drm_vblank_get" refcount */
|
|
|
if (vblank->inmodeset) {
|
|
|
atomic_dec(&vblank->refcount);
|