Subversion Repositories Kolibri OS

Rev

Rev 1182 | Rev 1404 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1182 Rev 1321
Line 166... Line 166...
166
	}
166
	}
167
	write_unlock_irqrestore(&fence->rdev->fence_drv.lock, irq_flags);
167
	write_unlock_irqrestore(&fence->rdev->fence_drv.lock, irq_flags);
168
	return signaled;
168
	return signaled;
169
}
169
}
Line 170... Line -...
170
 
-
 
171
int r600_fence_wait(struct radeon_fence *fence,  bool intr, bool lazy)
-
 
172
{
-
 
173
	struct radeon_device *rdev;
-
 
174
	int ret = 0;
-
 
175
 
-
 
176
	rdev = fence->rdev;
-
 
177
 
-
 
178
	__set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
-
 
179
 
-
 
180
	while (1) {
-
 
181
		if (radeon_fence_signaled(fence))
-
 
182
			break;
-
 
183
 
-
 
184
		if (time_after_eq(jiffies, fence->timeout)) {
-
 
185
			ret = -EBUSY;
-
 
186
			break;
-
 
187
		}
-
 
188
 
-
 
189
		if (lazy)
-
 
190
			schedule_timeout(1);
-
 
191
 
-
 
192
		if (intr && signal_pending(current)) {
-
 
193
			ret = -ERESTARTSYS;
-
 
194
			break;
-
 
195
		}
-
 
196
	}
-
 
197
	__set_current_state(TASK_RUNNING);
-
 
198
	return ret;
-
 
199
}
-
 
200
 
-
 
201
 
170
 
202
int radeon_fence_wait(struct radeon_fence *fence, bool intr)
171
int radeon_fence_wait(struct radeon_fence *fence, bool intr)
203
{
172
{
204
	struct radeon_device *rdev;
173
	struct radeon_device *rdev;
205
	unsigned long cur_jiffies;
174
	unsigned long cur_jiffies;
Line 214... Line 183...
214
	rdev = fence->rdev;
183
	rdev = fence->rdev;
215
	if (radeon_fence_signaled(fence)) {
184
	if (radeon_fence_signaled(fence)) {
216
		return 0;
185
		return 0;
217
	}
186
	}
Line 218... Line -...
218
 
-
 
219
	if (rdev->family >= CHIP_R600) {
-
 
220
		r = r600_fence_wait(fence, intr, 0);
-
 
221
		if (r == -ERESTARTSYS)
-
 
222
			return -EBUSY;
-
 
223
		return r;
-
 
224
	}
-
 
225
 
187
 
226
retry:
188
retry:
227
	cur_jiffies = jiffies;
189
	cur_jiffies = jiffies;
228
	timeout = HZ / 100;
190
	timeout = HZ / 100;
229
	if (time_after(fence->timeout, cur_jiffies)) {
191
	if (time_after(fence->timeout, cur_jiffies)) {
230
		timeout = fence->timeout - cur_jiffies;
192
		timeout = fence->timeout - cur_jiffies;
Line 231... Line 193...
231
	}
193
	}
-
 
194
 
232
 
195
	if (intr) {
233
	if (intr) {
196
		radeon_irq_kms_sw_irq_get(rdev);
-
 
197
		r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
234
		r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
198
				radeon_fence_signaled(fence), timeout);
235
				radeon_fence_signaled(fence), timeout);
199
		radeon_irq_kms_sw_irq_put(rdev);
236
		if (unlikely(r == -ERESTARTSYS)) {
-
 
237
			return -EBUSY;
200
		if (unlikely(r < 0))
-
 
201
			return r;
238
		}
202
	} else {
239
	} else {
203
		radeon_irq_kms_sw_irq_get(rdev);
-
 
204
		r = wait_event_timeout(rdev->fence_drv.queue,
240
		r = wait_event_timeout(rdev->fence_drv.queue,
205
			 radeon_fence_signaled(fence), timeout);
241
			 radeon_fence_signaled(fence), timeout);
206
		radeon_irq_kms_sw_irq_put(rdev);
242
	}
207
	}
243
	if (unlikely(!radeon_fence_signaled(fence))) {
208
	if (unlikely(!radeon_fence_signaled(fence))) {
244
		if (unlikely(r == 0)) {
209
		if (unlikely(r == 0)) {