mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-18 06:33:43 -04:00
drm/amdgpu: delay job free to when it's finished (v2)
for those jobs submitted through scheduler, do not free it immediately after scheduled, instead free it in global workqueue by its sched fence signaling callback function. v2: call uf's bo_undef after job_run() call job's sync free after job_run() no static inline __amdgpu_job_free() anymore, just use kfree(job) to replace it. Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -319,6 +319,11 @@ static bool amd_sched_entity_in(struct amd_sched_job *sched_job)
|
||||
return added;
|
||||
}
|
||||
|
||||
static void amd_sched_free_job(struct fence *f, struct fence_cb *cb) {
|
||||
struct amd_sched_job *job = container_of(cb, struct amd_sched_job, cb_free_job);
|
||||
schedule_work(&job->work_free_job);
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit a job to the job queue
|
||||
*
|
||||
@@ -330,6 +335,9 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job)
|
||||
{
|
||||
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);
|
||||
wait_event(entity->sched->job_scheduled,
|
||||
amd_sched_entity_in(sched_job));
|
||||
|
||||
Reference in New Issue
Block a user