Commit 21fa60ed authored by =?utf-8?q?Michel_D=C3=A4nzer?='s avatar =?utf-8?q?Michel_D=C3=A4nzer?= Committed by airlied
Browse files

drm: i915: Only return EBUSY after we've established we need to schedule a new swap.



Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
parent 2dbb232c
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -392,11 +392,6 @@ int i915_vblank_swap(DRM_IOCTL_ARGS)
		return DRM_ERR(EINVAL);
		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,
	DRM_COPY_FROM_USER_IOCTL(swap, (drm_i915_vblank_swap_t __user *) data,
				 sizeof(swap));
				 sizeof(swap));


@@ -461,6 +456,11 @@ int i915_vblank_swap(DRM_IOCTL_ARGS)


	spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
	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);
	vbl_swap = drm_calloc(1, sizeof(vbl_swap), DRM_MEM_DRIVER);


	if (!vbl_swap) {
	if (!vbl_swap) {