aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-06-29 09:10:31 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-07-07 15:06:10 -0400
commita5fb4ec29c74a16ce1c269e52bc85ca86ee41e81 (patch)
tree108330ce5b0181d0cef561187daf7894297bf7f8
parenta79a5bdcefc4d283b58eef46804c43c88789dd1f (diff)
drm/amdgpu: earlier free SA resources
Keep the time we don't have a fence associated with the resource smaller. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_job.c4
3 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 4fc879e594aa..9f70546594a8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -760,6 +760,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
760int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size, 760int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
761 struct amdgpu_job **job); 761 struct amdgpu_job **job);
762 762
763void amdgpu_job_free_resources(struct amdgpu_job *job);
763void amdgpu_job_free(struct amdgpu_job *job); 764void amdgpu_job_free(struct amdgpu_job *job);
764int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, 765int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
765 struct amd_sched_entity *entity, void *owner, 766 struct amd_sched_entity *entity, void *owner,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 475c95f670f8..0db32e3b13c0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -855,6 +855,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
855 p->fence = fence_get(fence); 855 p->fence = fence_get(fence);
856 cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, fence); 856 cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, fence);
857 job->uf_sequence = cs->out.handle; 857 job->uf_sequence = cs->out.handle;
858 amdgpu_job_free_resources(job);
858 859
859 trace_amdgpu_cs_ioctl(job); 860 trace_amdgpu_cs_ioctl(job);
860 amd_sched_entity_push_job(&job->base); 861 amd_sched_entity_push_job(&job->base);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 347962ea17ab..cdcfda6618d0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -79,7 +79,7 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
79 return r; 79 return r;
80} 80}
81 81
82static void amdgpu_job_free_resources(struct amdgpu_job *job) 82void amdgpu_job_free_resources(struct amdgpu_job *job)
83{ 83{
84 struct fence *f; 84 struct fence *f;
85 unsigned i; 85 unsigned i;
@@ -127,6 +127,7 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
127 job->owner = owner; 127 job->owner = owner;
128 job->ctx = entity->fence_context; 128 job->ctx = entity->fence_context;
129 *f = fence_get(fence); 129 *f = fence_get(fence);
130 amdgpu_job_free_resources(job);
130 amd_sched_entity_push_job(&job->base); 131 amd_sched_entity_push_job(&job->base);
131 132
132 return 0; 133 return 0;
@@ -179,7 +180,6 @@ static struct fence *amdgpu_job_run(struct amd_sched_job *sched_job)
179 180
180err: 181err:
181 job->fence = fence; 182 job->fence = fence;
182 amdgpu_job_free_resources(job);
183 return fence; 183 return fence;
184} 184}
185 185