On 2016å¹´06æ??30æ?¥ 16:53, Christian König wrote: > From: Christian König <christian.koenig at amd.com> > > Keep the time we don't have a fence associated with the resource smaller. > > Signed-off-by: Christian König <christian.koenig at amd.com> I see why you move job->fence and sync to another place. Reviewed-by: Chunming Zhou <david1.zhou at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 4 ++-- > 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 0f18c67..24faa79 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -761,6 +761,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, > int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size, > struct amdgpu_job **job); > > +void amdgpu_job_free_resources(struct amdgpu_job *job); > void amdgpu_job_free(struct amdgpu_job *job); > int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, > 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 9f148ba..8d4fe8a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > @@ -850,6 +850,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, > p->fence = fence_get(fence); > cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, fence); > job->uf_sequence = cs->out.handle; > + amdgpu_job_free_resources(job); > > trace_amdgpu_cs_ioctl(job); > 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 347962e..cdcfda6 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, > return r; > } > > -static void amdgpu_job_free_resources(struct amdgpu_job *job) > +void amdgpu_job_free_resources(struct amdgpu_job *job) > { > struct fence *f; > unsigned i; > @@ -127,6 +127,7 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, > job->owner = owner; > job->ctx = entity->fence_context; > *f = fence_get(fence); > + amdgpu_job_free_resources(job); > amd_sched_entity_push_job(&job->base); > > return 0; > @@ -179,7 +180,6 @@ static struct fence *amdgpu_job_run(struct amd_sched_job *sched_job) > > err: > job->fence = fence; > - amdgpu_job_free_resources(job); > return fence; > } >