]> git.hungrycats.org Git - linux/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 23 Mar 2009 21:55:30 +0000 (14:55 -0700)
commit 71e0ffa599f54058d9b8724b4b14d0486751681d upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/gpu/drm/i915/i915_irq.c

index 69b9a42da95ed720e85841c00ab7580fdff94830..81ac2bd1fcb7c2bb2003548918e4d8b7e5ada6f0 100644 (file)
@@ -400,6 +400,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))