From e349b58b4a6ebfe299720cb921039a600c145e65 Mon Sep 17 00:00:00 2001 From: Michel Dänzer Date: Tue, 18 Sep 2007 21:03:22 +0100 Subject: i915: Reinstate check that drawable has valid information in i915_vblank_swap. --- shared-core/i915_irq.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c index ea84c708..7baa23c0 100644 --- a/shared-core/i915_irq.c +++ b/shared-core/i915_irq.c @@ -612,6 +612,21 @@ int i915_vblank_swap(struct drm_device *dev, void *data, return -EINVAL; } + DRM_SPINLOCK_IRQSAVE(&dev->drw_lock, irqflags); + + /* It makes no sense to schedule a swap for a drawable that doesn't have + * valid information at this point. E.g. this could mean that the X + * server is too old to push drawable information to the DRM, in which + * case all such swaps would become ineffective. + */ + if (!drm_get_drawable_info(dev, swap->drawable)) { + DRM_SPINUNLOCK_IRQRESTORE(&dev->drw_lock, irqflags); + DRM_DEBUG("Invalid drawable ID %d\n", swap->drawable); + return -EINVAL; + } + + DRM_SPINUNLOCK_IRQRESTORE(&dev->drw_lock, irqflags); + curseq = atomic_read(pipe ? &dev->vbl_received2 : &dev->vbl_received); if (seqtype == _DRM_VBLANK_RELATIVE) -- cgit v1.2.3