generic-poky/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-i915-vblan...

27 lines
979 B
Diff

diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index f85aaf2..2e5841e 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -412,6 +412,9 @@ int drm_vblank_get(struct drm_device *dev, int crtc)
dev->vblank_enabled[crtc] = 1;
drm_update_vblank_count(dev, crtc);
}
+ } else if (atomic_read(&dev->vblank_refcount[crtc]) > 1) {
+ atomic_dec(&dev->vblank_refcount[crtc]);
+ ret = -EINVAL;
}
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 748ed50..9cb07a5 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1549,6 +1549,7 @@ static void i9xx_crtc_dpms(struct drm_crtc *crtc, int mode)
/* Wait for vblank for the disable to take effect. */
intel_wait_for_vblank(dev);
+ dev->vblank_enabled[pipe] = 0;
temp = I915_READ(dpll_reg);
if ((temp & DPLL_VCO_ENABLE) != 0) {