168,37 → 168,6 |
return signaled; |
} |
|
int r600_fence_wait(struct radeon_fence *fence, bool intr, bool lazy) |
{ |
struct radeon_device *rdev; |
int ret = 0; |
|
rdev = fence->rdev; |
|
__set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); |
|
while (1) { |
if (radeon_fence_signaled(fence)) |
break; |
|
if (time_after_eq(jiffies, fence->timeout)) { |
ret = -EBUSY; |
break; |
} |
|
if (lazy) |
schedule_timeout(1); |
|
if (intr && signal_pending(current)) { |
ret = -ERESTARTSYS; |
break; |
} |
} |
__set_current_state(TASK_RUNNING); |
return ret; |
} |
|
|
int radeon_fence_wait(struct radeon_fence *fence, bool intr) |
{ |
struct radeon_device *rdev; |
216,13 → 185,6 |
return 0; |
} |
|
if (rdev->family >= CHIP_R600) { |
r = r600_fence_wait(fence, intr, 0); |
if (r == -ERESTARTSYS) |
return -EBUSY; |
return r; |
} |
|
retry: |
cur_jiffies = jiffies; |
timeout = HZ / 100; |
231,14 → 193,17 |
} |
|
if (intr) { |
radeon_irq_kms_sw_irq_get(rdev); |
r = wait_event_interruptible_timeout(rdev->fence_drv.queue, |
radeon_fence_signaled(fence), timeout); |
if (unlikely(r == -ERESTARTSYS)) { |
return -EBUSY; |
} |
radeon_irq_kms_sw_irq_put(rdev); |
if (unlikely(r < 0)) |
return r; |
} else { |
radeon_irq_kms_sw_irq_get(rdev); |
r = wait_event_timeout(rdev->fence_drv.queue, |
radeon_fence_signaled(fence), timeout); |
radeon_irq_kms_sw_irq_put(rdev); |
} |
if (unlikely(!radeon_fence_signaled(fence))) { |
if (unlikely(r == 0)) { |