Commit e686941a authored by Monk Liu's avatar Monk Liu Committed by Alex Deucher

drm/amdgpu: use sched_job_init to initialize sched_job

Consolidate job initialization in one place rather than
duplicating it in multiple places.
Signed-off-by: default avatarMonk Liu <Monk.Liu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 03ccf481
...@@ -862,27 +862,24 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, ...@@ -862,27 +862,24 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
union drm_amdgpu_cs *cs) union drm_amdgpu_cs *cs)
{ {
struct amdgpu_ring *ring = p->job->ring; struct amdgpu_ring *ring = p->job->ring;
struct amd_sched_fence *fence; struct fence *fence;
struct amdgpu_job *job; struct amdgpu_job *job;
int r;
job = p->job; job = p->job;
p->job = NULL; p->job = NULL;
job->base.sched = &ring->sched; r = amd_sched_job_init(&job->base, &ring->sched,
job->base.s_entity = &p->ctx->rings[ring->idx].entity; &p->ctx->rings[ring->idx].entity,
job->owner = p->filp; p->filp, &fence);
if (r) {
fence = amd_sched_fence_create(job->base.s_entity, p->filp);
if (!fence) {
amdgpu_job_free(job); amdgpu_job_free(job);
return -ENOMEM; return r;
} }
job->base.s_fence = fence; job->owner = p->filp;
p->fence = fence_get(&fence->base); p->fence = fence_get(fence);
cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, fence);
cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring,
&fence->base);
job->ibs[job->num_ibs - 1].sequence = cs->out.handle; job->ibs[job->num_ibs - 1].sequence = cs->out.handle;
trace_amdgpu_cs_ioctl(job); trace_amdgpu_cs_ioctl(job);
......
...@@ -87,16 +87,19 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, ...@@ -87,16 +87,19 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
struct amd_sched_entity *entity, void *owner, struct amd_sched_entity *entity, void *owner,
struct fence **f) struct fence **f)
{ {
struct fence *fence;
int r;
job->ring = ring; job->ring = ring;
job->base.sched = &ring->sched;
job->base.s_entity = entity;
job->base.s_fence = amd_sched_fence_create(job->base.s_entity, owner);
if (!job->base.s_fence)
return -ENOMEM;
*f = fence_get(&job->base.s_fence->base); if (!f)
return -EINVAL;
r = amd_sched_job_init(&job->base, &ring->sched, entity, owner, &fence);
if (r)
return r;
job->owner = owner; job->owner = owner;
*f = fence_get(fence);
amd_sched_entity_push_job(&job->base); amd_sched_entity_push_job(&job->base);
return 0; return 0;
......
...@@ -335,6 +335,23 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job) ...@@ -335,6 +335,23 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job)
amd_sched_entity_in(sched_job)); amd_sched_entity_in(sched_job));
} }
/* init a sched_job with basic field */
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)
{
job->sched = sched;
job->s_entity = entity;
job->s_fence = amd_sched_fence_create(entity, owner);
if (!job->s_fence)
return -ENOMEM;
if (fence)
*fence = &job->s_fence->base;
return 0;
}
/** /**
* Return ture if we can push more jobs to the hw. * Return ture if we can push more jobs to the hw.
*/ */
......
...@@ -144,5 +144,8 @@ struct amd_sched_fence *amd_sched_fence_create( ...@@ -144,5 +144,8 @@ struct amd_sched_fence *amd_sched_fence_create(
struct amd_sched_entity *s_entity, void *owner); struct amd_sched_entity *s_entity, void *owner);
void amd_sched_fence_scheduled(struct amd_sched_fence *fence); void amd_sched_fence_scheduled(struct amd_sched_fence *fence);
void amd_sched_fence_signal(struct amd_sched_fence *fence); void amd_sched_fence_signal(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);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment