[Intel-gfx] [PATCH] drm: Remove two leaks of vblank reference count in error paths.
Eric Anholt
eric at anholt.net
Fri Oct 17 20:47:10 CEST 2008
If the failing paths were hit, the vblank IRQ would never get turned off
again.
Signed-off-by: Eric Anholt <eric at anholt.net>
---
drivers/gpu/drm/drm_irq.c | 5 ++++-
drivers/gpu/drm/i915/i915_irq.c | 1 +
2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index d0c13d9..81739c7 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -597,11 +597,14 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
goto done;
}
+ /* Get a refcount on the vblank, which will be released by
+ * drm_vbl_send_signals().
+ */
ret = drm_vblank_get(dev, crtc);
if (ret) {
drm_free(vbl_sig, sizeof(struct drm_vbl_sig),
DRM_MEM_DRIVER);
- return ret;
+ goto done;
}
atomic_inc(&dev->vbl_signal_pending);
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 6d0ae92..3658a04 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -768,6 +768,7 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
vbl_swap->plane == plane &&
vbl_swap->sequence == swap->sequence) {
spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
+ drm_vblank_put(dev, pipe);
DRM_DEBUG("Already scheduled\n");
return 0;
}
--
1.5.6.5
More information about the Intel-gfx
mailing list