Message ID | 20250221062702.1293754-1-liuqianyi125@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm/scheduler: Fix mem leak when last_scheduled signaled | expand |
diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c index 69bcf0e99d57..1c0c14bcf726 100644 --- a/drivers/gpu/drm/scheduler/sched_entity.c +++ b/drivers/gpu/drm/scheduler/sched_entity.c @@ -259,9 +259,12 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity) struct drm_sched_fence *s_fence = job->s_fence; dma_fence_get(&s_fence->finished); - if (!prev || dma_fence_add_callback(prev, &job->finish_cb, - drm_sched_entity_kill_jobs_cb)) + if (!prev || + dma_fence_add_callback(prev, &job->finish_cb, + drm_sched_entity_kill_jobs_cb)) { + dma_fence_put(prev); drm_sched_entity_kill_jobs_cb(NULL, &job->finish_cb); + } prev = &s_fence->finished; }
Problem: If prev(last_scheduled) was already signaled I encountred a memory leak in drm_sched_entity_fini. This is because the prev(last_scheduled) fence is not free properly. Fix: Balance the prev(last_scheduled) fence refcnt when dma_fence_add_callback failed. Signed-off-by: qianyi liu <liuqianyi125@gmail.com> --- drivers/gpu/drm/scheduler/sched_entity.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)