From fdeda884cd54908cd1d0d1e5c495e6261de9c50f Mon Sep 17 00:00:00 2001 From: "monk.liu" Date: Mon, 30 Nov 2015 16:19:34 +0800 Subject: [PATCH 0804/1050] dma-buf: return index of the first signaled fence drm/amdgpu: return first signaled fence index in status parameter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1b0d525f351015941a32206fec2d2f9199b8ef69 Signed-off-by: monk.liu Reviewed-by: Christian König --- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 +++- drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index d9fbfb5..272cc89 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -1024,6 +1024,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; @@ -1049,13 +1050,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; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c index 8b88edb..fef2402 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c @@ -359,7 +359,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); r = (t > 0) ? 0 : t; spin_lock(&sa_manager->wq.lock); } else { -- 1.9.1