| From 71e0ffa599f54058d9b8724b4b14d0486751681d Mon Sep 17 00:00:00 2001 |
| From: Jesse Barnes <jbarnes@virtuousgeek.org> |
| Date: Thu, 8 Jan 2009 10:42:15 -0800 |
| Subject: drm/i915: don't enable vblanks on disabled pipes |
| |
| From: Jesse Barnes <jbarnes@virtuousgeek.org> |
| |
| 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 | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/drivers/gpu/drm/i915/i915_irq.c |
| +++ b/drivers/gpu/drm/i915/i915_irq.c |
| @@ -400,6 +400,12 @@ int i915_enable_vblank(struct drm_device |
| { |
| 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)) |