@@ -1191,6 +1191,7 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device *adev,
{
unsigned long timeout = amdgpu_gem_timeout(wait->in.timeout_ns);
uint32_t fence_count = wait->in.fence_count;
+ uint32_t first = ~0;
struct fence **array;
unsigned i;
long r;
@@ -1216,13 +1217,14 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device *adev,
}
}
- r = fence_wait_any_timeout(array, fence_count, true, timeout);
+ r = fence_wait_any_timeout(array, fence_count, true, timeout, &first);
if (r < 0)
goto err_free_fence_array;
out:
memset(wait, 0, sizeof(*wait));
wait->out.status = (r > 0);
+ wait->out.first_signaled = first;
/* set return value 0 to indicate success */
r = 0;
@@ -361,7 +361,7 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_manager *sa_manager,
if (count) {
spin_unlock(&sa_manager->wq.lock);
t = fence_wait_any_timeout(fences, count, false,
- MAX_SCHEDULE_TIMEOUT);
+ MAX_SCHEDULE_TIMEOUT, NULL);
for (i = 0; i < count; ++i)
fence_put(fences[i]);
@@ -324,7 +324,8 @@ struct drm_amdgpu_wait_fences_in {
};
struct drm_amdgpu_wait_fences_out {
- __u64 status;
+ __u32 status;
+ __u32 first_signaled;
};
union drm_amdgpu_wait_fences {