return r;
}
-void amdgpu_job_free(struct amdgpu_job *job)
+static void amdgpu_job_free_resources(struct amdgpu_job *job)
{
struct fence *f;
unsigned i;
amdgpu_bo_unref(&job->uf_bo);
amdgpu_sync_free(&job->sync);
-
- if (!job->base.use_sched)
- kfree(job);
}
void amdgpu_job_free_func(struct kref *refcount)
kfree(job);
}
+void amdgpu_job_free(struct amdgpu_job *job)
+{
+ amdgpu_job_free_resources(job);
+ kfree(job);
+}
+
int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
struct amd_sched_entity *entity, void *owner,
struct fence **f)
err:
job->fence = fence;
- amdgpu_job_free(job);
+ amdgpu_job_free_resources(job);
return fence;
}
{
struct amd_sched_entity *entity = sched_job->s_entity;
- sched_job->use_sched = 1;
fence_add_callback(&sched_job->s_fence->base,
&sched_job->cb_free_job, amd_sched_free_job);
trace_amd_sched_job(sched_job);
struct amd_gpu_scheduler *sched;
struct amd_sched_entity *s_entity;
struct amd_sched_fence *s_fence;
- bool use_sched; /* true if the job goes to scheduler */
struct fence_cb cb_free_job;
struct work_struct work_free_job;
struct list_head node;