diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c index c00d82c6..594a6088 100644 --- a/shared-core/i915_irq.c +++ b/shared-core/i915_irq.c @@ -652,7 +652,7 @@ int i915_vblank_swap(DRM_IOCTL_ARGS) spin_unlock_irqrestore(&dev->drw_lock, irqflags); - return 0; + goto out; } } @@ -692,9 +692,6 @@ int i915_vblank_swap(DRM_IOCTL_ARGS) vbl_swap->sequence = swap.sequence; vbl_swap->flip = (swap.seqtype & _DRM_VBLANK_FLIP); - if (vbl_swap->flip) - swap.sequence++; - spin_lock_irqsave(&dev_priv->swaps_lock, irqflags); list_add_tail((struct list_head *)vbl_swap, &dev_priv->vbl_swaps.head); @@ -702,6 +699,10 @@ int i915_vblank_swap(DRM_IOCTL_ARGS) spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags); +out: + if (swap.seqtype & _DRM_VBLANK_FLIP) + swap.sequence++; + DRM_COPY_TO_USER_IOCTL((drm_i915_vblank_swap_t __user *) data, swap, sizeof(swap));