diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c index 5cb27d525e43..3f48759793de 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | |||
@@ -337,6 +337,7 @@ int amdgpu_sa_bo_new(struct amdgpu_device *adev, | |||
337 | { | 337 | { |
338 | struct fence *fences[AMDGPU_MAX_RINGS]; | 338 | struct fence *fences[AMDGPU_MAX_RINGS]; |
339 | unsigned tries[AMDGPU_MAX_RINGS]; | 339 | unsigned tries[AMDGPU_MAX_RINGS]; |
340 | unsigned count; | ||
340 | int i, r; | 341 | int i, r; |
341 | signed long t; | 342 | signed long t; |
342 | 343 | ||
@@ -371,13 +372,18 @@ int amdgpu_sa_bo_new(struct amdgpu_device *adev, | |||
371 | /* see if we can skip over some allocations */ | 372 | /* see if we can skip over some allocations */ |
372 | } while (amdgpu_sa_bo_next_hole(sa_manager, fences, tries)); | 373 | } while (amdgpu_sa_bo_next_hole(sa_manager, fences, tries)); |
373 | 374 | ||
374 | spin_unlock(&sa_manager->wq.lock); | 375 | for (i = 0, count = 0; i < AMDGPU_MAX_RINGS; ++i) |
375 | t = amdgpu_fence_wait_any(fences, AMDGPU_MAX_RINGS, | 376 | if (fences[i]) |
376 | false, MAX_SCHEDULE_TIMEOUT); | 377 | fences[count++] = fences[i]; |
377 | r = (t > 0) ? 0 : t; | 378 | |
378 | spin_lock(&sa_manager->wq.lock); | 379 | if (count) { |
379 | /* if we have nothing to wait for block */ | 380 | spin_unlock(&sa_manager->wq.lock); |
380 | if (r == -ENOENT) { | 381 | t = fence_wait_any_timeout(fences, count, false, |
382 | MAX_SCHEDULE_TIMEOUT); | ||
383 | r = (t > 0) ? 0 : t; | ||
384 | spin_lock(&sa_manager->wq.lock); | ||
385 | } else { | ||
386 | /* if we have nothing to wait for block */ | ||
381 | r = wait_event_interruptible_locked( | 387 | r = wait_event_interruptible_locked( |
382 | sa_manager->wq, | 388 | sa_manager->wq, |
383 | amdgpu_sa_event(sa_manager, size, align) | 389 | amdgpu_sa_event(sa_manager, size, align) |