| @@ -313,27 +313,27 @@ static bool radeon_fence_any_seq_signale | | | @@ -313,27 +313,27 @@ static bool radeon_fence_any_seq_signale |
313 | * Wait for the requested sequence number(s) to be written by any ring | | 313 | * Wait for the requested sequence number(s) to be written by any ring |
314 | * (all asics). Sequnce number array is indexed by ring id. | | 314 | * (all asics). Sequnce number array is indexed by ring id. |
315 | * @intr selects whether to use interruptable (true) or non-interruptable | | 315 | * @intr selects whether to use interruptable (true) or non-interruptable |
316 | * (false) sleep when waiting for the sequence number. Helper function | | 316 | * (false) sleep when waiting for the sequence number. Helper function |
317 | * for radeon_fence_wait_*(). | | 317 | * for radeon_fence_wait_*(). |
318 | * Returns 0 if the sequence number has passed, error for all other cases. | | 318 | * Returns 0 if the sequence number has passed, error for all other cases. |
319 | * -EDEADLK is returned when a GPU lockup has been detected. | | 319 | * -EDEADLK is returned when a GPU lockup has been detected. |
320 | */ | | 320 | */ |
321 | static int radeon_fence_wait_seq(struct radeon_device *rdev, u64 *target_seq, | | 321 | static int radeon_fence_wait_seq(struct radeon_device *rdev, u64 *target_seq, |
322 | bool intr) | | 322 | bool intr) |
323 | { | | 323 | { |
324 | uint64_t last_seq[RADEON_NUM_RINGS]; | | 324 | uint64_t last_seq[RADEON_NUM_RINGS]; |
325 | bool signaled; | | 325 | bool signaled; |
326 | int i, r; | | 326 | int i, r = 0; |
327 | | | 327 | |
328 | spin_lock(&rdev->fence_lock); | | 328 | spin_lock(&rdev->fence_lock); |
329 | while (!radeon_fence_any_seq_signaled(rdev, target_seq)) { | | 329 | while (!radeon_fence_any_seq_signaled(rdev, target_seq)) { |
330 | | | 330 | |
331 | /* Save current sequence values, used to check for GPU lockups */ | | 331 | /* Save current sequence values, used to check for GPU lockups */ |
332 | for (i = 0; i < RADEON_NUM_RINGS; ++i) { | | 332 | for (i = 0; i < RADEON_NUM_RINGS; ++i) { |
333 | if (!target_seq[i]) | | 333 | if (!target_seq[i]) |
334 | continue; | | 334 | continue; |
335 | | | 335 | |
336 | last_seq[i] = atomic64_read(&rdev->fence_drv[i].last_seq); | | 336 | last_seq[i] = atomic64_read(&rdev->fence_drv[i].last_seq); |
337 | trace_radeon_fence_wait_begin(rdev->ddev, i, target_seq[i]); | | 337 | trace_radeon_fence_wait_begin(rdev->ddev, i, target_seq[i]); |
338 | radeon_irq_kms_sw_irq_get(rdev, i); | | 338 | radeon_irq_kms_sw_irq_get(rdev, i); |
339 | } | | 339 | } |
| @@ -415,27 +415,27 @@ static int radeon_fence_wait_seq(struct | | | @@ -415,27 +415,27 @@ static int radeon_fence_wait_seq(struct |
415 | rdev->needs_reset = true; | | 415 | rdev->needs_reset = true; |
416 | #ifdef __NetBSD__ | | 416 | #ifdef __NetBSD__ |
417 | DRM_SPIN_WAKEUP_ALL(&rdev->fence_queue, | | 417 | DRM_SPIN_WAKEUP_ALL(&rdev->fence_queue, |
418 | &rdev->fence_lock); | | 418 | &rdev->fence_lock); |
419 | #else | | 419 | #else |
420 | wake_up_all(&rdev->fence_queue); | | 420 | wake_up_all(&rdev->fence_queue); |
421 | #endif | | 421 | #endif |
422 | r = -EDEADLK; | | 422 | r = -EDEADLK; |
423 | goto out; | | 423 | goto out; |
424 | } | | 424 | } |
425 | } | | 425 | } |
426 | } | | 426 | } |
427 | out: spin_unlock(&rdev->fence_lock); | | 427 | out: spin_unlock(&rdev->fence_lock); |
428 | return 0; | | 428 | return r; |
429 | } | | 429 | } |
430 | | | 430 | |
431 | /** | | 431 | /** |
432 | * radeon_fence_wait - wait for a fence to signal | | 432 | * radeon_fence_wait - wait for a fence to signal |
433 | * | | 433 | * |
434 | * @fence: radeon fence object | | 434 | * @fence: radeon fence object |
435 | * @intr: use interruptable sleep | | 435 | * @intr: use interruptable sleep |
436 | * | | 436 | * |
437 | * Wait for the requested fence to signal (all asics). | | 437 | * Wait for the requested fence to signal (all asics). |
438 | * @intr selects whether to use interruptable (true) or non-interruptable | | 438 | * @intr selects whether to use interruptable (true) or non-interruptable |
439 | * (false) sleep when waiting for the fence. | | 439 | * (false) sleep when waiting for the fence. |
440 | * Returns 0 if the fence has passed, error for all other cases. | | 440 | * Returns 0 if the fence has passed, error for all other cases. |
441 | */ | | 441 | */ |