Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f89551bf authored by Jerome Glisse's avatar Jerome Glisse Committed by Dave Airlie
Browse files

drm/radeon/kms: Return to userspace on ERESTARTSYS



radeon_object.h wasn't converted to ERESTARTSYS change. No
each time we got an ERESTARTSYS we return to userspace (ie
we were interrupted by a signal and we let the userspace
reschedule the ioctl).

Signed-off-by: default avatarJerome Glisse <jglisse@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 51f07b7e
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -59,18 +59,16 @@ static inline unsigned radeon_mem_type_to_domain(u32 mem_type)
 *
 * Returns:
 * -EBUSY: buffer is busy and @no_wait is true
 * -ERESTART: A wait for the buffer to become unreserved was interrupted by
 * -ERESTARTSYS: A wait for the buffer to become unreserved was interrupted by
 * a signal. Release all buffer reservations and return to user-space.
 */
static inline int radeon_bo_reserve(struct radeon_bo *bo, bool no_wait)
{
	int r;

retry:
	r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0);
	if (unlikely(r != 0)) {
		if (r == -ERESTART)
			goto retry;
		if (r != -ERESTARTSYS)
			dev_err(bo->rdev->dev, "%p reserve failed\n", bo);
		return r;
	}
@@ -125,11 +123,9 @@ static inline int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type,
{
	int r;

retry:
	r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0);
	if (unlikely(r != 0)) {
		if (r == -ERESTART)
			goto retry;
		if (r != -ERESTARTSYS)
			dev_err(bo->rdev->dev, "%p reserve failed for wait\n", bo);
		return r;
	}
@@ -140,8 +136,6 @@ static inline int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type,
		r = ttm_bo_wait(&bo->tbo, true, true, no_wait);
	spin_unlock(&bo->tbo.lock);
	ttm_bo_unreserve(&bo->tbo);
	if (unlikely(r == -ERESTART))
		goto retry;
	return r;
}