mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 08:48:48 +00:00
drm: Remove two leaks of vblank reference count in error paths.
If the failing paths were hit, the vblank IRQ would never get turned off again. Signed-off-by: Eric Anholt <eric@anholt.net> Acked-by: Keith Packard <keithp@keithp.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
786225eb2f
commit
35ad68c181
@ -594,11 +594,14 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get a refcount on the vblank, which will be released by
|
||||||
|
* drm_vbl_send_signals().
|
||||||
|
*/
|
||||||
ret = drm_vblank_get(dev, crtc);
|
ret = drm_vblank_get(dev, crtc);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
drm_free(vbl_sig, sizeof(struct drm_vbl_sig),
|
drm_free(vbl_sig, sizeof(struct drm_vbl_sig),
|
||||||
DRM_MEM_DRIVER);
|
DRM_MEM_DRIVER);
|
||||||
return ret;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic_inc(&dev->vbl_signal_pending);
|
atomic_inc(&dev->vbl_signal_pending);
|
||||||
|
@ -771,6 +771,7 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
|
|||||||
vbl_swap->plane == plane &&
|
vbl_swap->plane == plane &&
|
||||||
vbl_swap->sequence == swap->sequence) {
|
vbl_swap->sequence == swap->sequence) {
|
||||||
spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
|
spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
|
||||||
|
drm_vblank_put(dev, pipe);
|
||||||
DRM_DEBUG("Already scheduled\n");
|
DRM_DEBUG("Already scheduled\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user