diff options
Diffstat (limited to 'drivers/gpu/host1x/job.c')
| -rw-r--r-- | drivers/gpu/host1x/job.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c index b2761aa03b95..3ed49e1fd933 100644 --- a/drivers/gpu/host1x/job.c +++ b/drivers/gpu/host1x/job.c @@ -88,9 +88,15 @@ static void job_free(struct kref *ref)  	if (job->release)  		job->release(job); -	if (job->waiter) -		host1x_intr_put_ref(job->syncpt->host, job->syncpt->id, -				    job->waiter, false); +	if (job->fence) { +		/* +		 * remove_callback is atomic w.r.t. fence signaling, so +		 * after the call returns, we know that the callback is not +		 * in execution, and the fence can be safely freed. +		 */ +		dma_fence_remove_callback(job->fence, &job->fence_cb); +		dma_fence_put(job->fence); +	}  	if (job->syncpt)  		host1x_syncpt_put(job->syncpt);  |