Only return EBUSY after we've established we need to schedule a new swap.
authorMichel Dänzer <michel@tungstengraphics.com>
Fri, 1 Sep 2006 09:48:07 +0000 (11:48 +0200)
committerMichel Dänzer <michel@tungstengraphics.com>
Fri, 29 Sep 2006 10:55:09 +0000 (12:55 +0200)
(cherry picked from 50a0284a61d4415c0ebdb02decee76ef3115007a commit)

shared-core/i915_irq.c

index d88afdd..158a91d 100644 (file)
@@ -427,11 +427,6 @@ int i915_vblank_swap(DRM_IOCTL_ARGS)
                return DRM_ERR(EINVAL);
        }
 
-       if (dev_priv->swaps_pending >= 100) {
-               DRM_DEBUG("Too many swaps queued\n");
-               return DRM_ERR(EBUSY);
-       }
-
        DRM_COPY_FROM_USER_IOCTL(swap, (drm_i915_vblank_swap_t __user *) data,
                                 sizeof(swap));
 
@@ -496,6 +491,11 @@ int i915_vblank_swap(DRM_IOCTL_ARGS)
 
        spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
 
+       if (dev_priv->swaps_pending >= 100) {
+               DRM_DEBUG("Too many swaps queued\n");
+               return DRM_ERR(EBUSY);
+       }
+
        vbl_swap = drm_calloc(1, sizeof(vbl_swap), DRM_MEM_DRIVER);
 
        if (!vbl_swap) {