diff options
Diffstat (limited to 'drivers/gpu/drm/scheduler/sched_entity.c')
| -rw-r--r-- | drivers/gpu/drm/scheduler/sched_entity.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c index 6137537aaea4..4b913dbb7d7b 100644 --- a/drivers/gpu/drm/scheduler/sched_entity.c +++ b/drivers/gpu/drm/scheduler/sched_entity.c @@ -207,6 +207,7 @@ static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f,  	struct drm_sched_job *job = container_of(cb, struct drm_sched_job,  						 finish_cb); +	dma_fence_put(f);  	INIT_WORK(&job->work, drm_sched_entity_kill_jobs_work);  	schedule_work(&job->work);  } @@ -234,8 +235,10 @@ static void drm_sched_entity_kill_jobs(struct drm_sched_entity *entity)  		struct drm_sched_fence *s_fence = job->s_fence;  		/* Wait for all dependencies to avoid data corruptions */ -		while ((f = drm_sched_job_dependency(job, entity))) +		while ((f = drm_sched_job_dependency(job, entity))) {  			dma_fence_wait(f, false); +			dma_fence_put(f); +		}  		drm_sched_fence_scheduled(s_fence);  		dma_fence_set_error(&s_fence->finished, -ESRCH); @@ -250,6 +253,7 @@ static void drm_sched_entity_kill_jobs(struct drm_sched_entity *entity)  			continue;  		} +		dma_fence_get(entity->last_scheduled);  		r = dma_fence_add_callback(entity->last_scheduled,  					   &job->finish_cb,  					   drm_sched_entity_kill_jobs_cb); | 
