summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2015-02-03 16:54:17 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-02-03 16:54:17 +0100
commitce85e0cb0152018519230c4e8e10460c56d48164 (patch)
tree109012cb1608c9a509a4b68c3d02c986d6e552d7
parent45e947f17e6a306a729ea478f7e20566cedb3fee (diff)
parenteb2ed66fe56f30c6ea841ac11681a2f51049b221 (diff)
Merge remote-tracking branch 'origin/topic/core-stuff' into drm-intel-nightly
-rw-r--r--drivers/gpu/drm/drm_irq.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 75647e7f012b..10574a0c3a55 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -185,8 +185,15 @@ static void vblank_disable_and_save(struct drm_device *dev, int crtc)
return;
}
- dev->driver->disable_vblank(dev, crtc);
- vblank->enabled = false;
+ /*
+ * Only disable vblank interrupts if they're enabled. This avoids
+ * calling the ->disable_vblank() operation in atomic context with the
+ * hardware potentially runtime suspended.
+ */
+ if (vblank->enabled) {
+ dev->driver->disable_vblank(dev, crtc);
+ vblank->enabled = false;
+ }
/* No further vblank irq's will be processed after
* this point. Get current hardware vblank count and