diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2009-01-08 10:42:15 -0800 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2009-01-11 08:59:48 +1000 |
commit | 71e0ffa599f54058d9b8724b4b14d0486751681d (patch) | |
tree | 93995ec627de4ef0e211965ed83fab58804f8770 /drivers/gpu | |
parent | 3d14bdad40315b54470cb7812293d14c8af2bf7d (diff) | |
download | op-kernel-dev-71e0ffa599f54058d9b8724b4b14d0486751681d.zip op-kernel-dev-71e0ffa599f54058d9b8724b4b14d0486751681d.tar.gz |
drm/i915: don't enable vblanks on disabled pipes
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>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 0cadafb..6290219 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -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)) |