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: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
51f07b7ebc
commit
f89551bfe9
|
@ -59,19 +59,17 @@ static inline unsigned radeon_mem_type_to_domain(u32 mem_type)
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* -EBUSY: buffer is busy and @no_wait is true
|
* -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.
|
* a signal. Release all buffer reservations and return to user-space.
|
||||||
*/
|
*/
|
||||||
static inline int radeon_bo_reserve(struct radeon_bo *bo, bool no_wait)
|
static inline int radeon_bo_reserve(struct radeon_bo *bo, bool no_wait)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
retry:
|
|
||||||
r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0);
|
r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0);
|
||||||
if (unlikely(r != 0)) {
|
if (unlikely(r != 0)) {
|
||||||
if (r == -ERESTART)
|
if (r != -ERESTARTSYS)
|
||||||
goto retry;
|
dev_err(bo->rdev->dev, "%p reserve failed\n", bo);
|
||||||
dev_err(bo->rdev->dev, "%p reserve failed\n", bo);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -125,12 +123,10 @@ static inline int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type,
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
retry:
|
|
||||||
r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0);
|
r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0);
|
||||||
if (unlikely(r != 0)) {
|
if (unlikely(r != 0)) {
|
||||||
if (r == -ERESTART)
|
if (r != -ERESTARTSYS)
|
||||||
goto retry;
|
dev_err(bo->rdev->dev, "%p reserve failed for wait\n", bo);
|
||||||
dev_err(bo->rdev->dev, "%p reserve failed for wait\n", bo);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
spin_lock(&bo->tbo.lock);
|
spin_lock(&bo->tbo.lock);
|
||||||
|
@ -140,8 +136,6 @@ retry:
|
||||||
r = ttm_bo_wait(&bo->tbo, true, true, no_wait);
|
r = ttm_bo_wait(&bo->tbo, true, true, no_wait);
|
||||||
spin_unlock(&bo->tbo.lock);
|
spin_unlock(&bo->tbo.lock);
|
||||||
ttm_bo_unreserve(&bo->tbo);
|
ttm_bo_unreserve(&bo->tbo);
|
||||||
if (unlikely(r == -ERESTART))
|
|
||||||
goto retry;
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue