drm/i915: don't enable vblanks on disabled pipes
authorJesse Barnes <jbarnes@virtuousgeek.org>
Thu, 8 Jan 2009 18:42:15 +0000 (10:42 -0800)
committerDave Airlie <airlied@linux.ie>
Sat, 10 Jan 2009 22:59:48 +0000 (08:59 +1000)
In some cases userland may be confused and try to wait on vblank events from
pipes that aren't actually enabled.  We shouldn't allow this, so return
-EINVAL if the pipe isn't on.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@linux.ie>
drivers/gpu/drm/i915/i915_irq.c

index 0cadafbef411ba094d020d1323f66f136ba0d1bd..6290219de6c8e832aa4209d761f7d2be0317211b 100644 (file)
@@ -411,6 +411,12 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        unsigned long irqflags;
+       int pipeconf_reg = (pipe == 0) ? PIPEACONF : PIPEBCONF;
+       u32 pipeconf;
+
+       pipeconf = I915_READ(pipeconf_reg);
+       if (!(pipeconf & PIPEACONF_ENABLE))
+               return -EINVAL;
 
        spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
        if (IS_I965G(dev))