On 2016å¹´06æ??30æ?¥ 16:54, Christian König wrote: > From: Christian König <christian.koenig at amd.com> > > We return the fence as part of the job structur anyway, > no need to do this twice. > > Signed-off-by: Christian König <christian.koenig at amd.com> Reviewed-by: Chunming Zhou <david1.zhou at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 8 +++----- > drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 5 ++--- > drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 4 +--- > drivers/gpu/drm/amd/scheduler/gpu_scheduler.h | 2 +- > 4 files changed, 7 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > index 8d4fe8a..73c5997 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > @@ -831,15 +831,13 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, > { > struct amdgpu_ring *ring = p->job->ring; > struct amd_sched_entity *entity = &p->ctx->rings[ring->idx].entity; > - struct fence *fence; > struct amdgpu_job *job; > int r; > > job = p->job; > p->job = NULL; > > - r = amd_sched_job_init(&job->base, &ring->sched, > - entity, p->filp, &fence); > + r = amd_sched_job_init(&job->base, &ring->sched, entity, p->filp); > if (r) { > amdgpu_job_free(job); > return r; > @@ -847,8 +845,8 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, > > job->owner = p->filp; > job->ctx = entity->fence_context; > - p->fence = fence_get(fence); > - cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, fence); > + p->fence = fence_get(&job->base.s_fence->finished); > + cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, p->fence); > job->uf_sequence = cs->out.handle; > amdgpu_job_free_resources(job); > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > index cdcfda6..327f4df 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c > @@ -113,20 +113,19 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, > struct amd_sched_entity *entity, void *owner, > struct fence **f) > { > - struct fence *fence; > int r; > job->ring = ring; > > if (!f) > return -EINVAL; > > - r = amd_sched_job_init(&job->base, &ring->sched, entity, owner, &fence); > + r = amd_sched_job_init(&job->base, &ring->sched, entity, owner); > if (r) > return r; > > job->owner = owner; > job->ctx = entity->fence_context; > - *f = fence_get(fence); > + *f = fence_get(&job->base.s_fence->finished); > amdgpu_job_free_resources(job); > amd_sched_entity_push_job(&job->base); > > diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c > index 2baedc4e..3405372 100644 > --- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c > +++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c > @@ -403,7 +403,7 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job) > int amd_sched_job_init(struct amd_sched_job *job, > struct amd_gpu_scheduler *sched, > struct amd_sched_entity *entity, > - void *owner, struct fence **fence) > + void *owner) > { > job->sched = sched; > job->s_entity = entity; > @@ -415,8 +415,6 @@ int amd_sched_job_init(struct amd_sched_job *job, > INIT_LIST_HEAD(&job->node); > INIT_DELAYED_WORK(&job->work_tdr, amd_sched_job_timedout); > > - if (fence) > - *fence = &job->s_fence->finished; > return 0; > } > > diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h > index 3e989b1..9024dc5 100644 > --- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h > +++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h > @@ -151,5 +151,5 @@ void amd_sched_fence_finished(struct amd_sched_fence *fence); > int amd_sched_job_init(struct amd_sched_job *job, > struct amd_gpu_scheduler *sched, > struct amd_sched_entity *entity, > - void *owner, struct fence **fence); > + void *owner); > #endif