drm/msm: Fix a fence leak in submit error path
[ Upstream commit 5d319f75ccf7f0927425a7545aa1a22b3eedc189 ] In error paths, we could unref the submit without calling drm_sched_entity_push_job(), so msm_job_free() will never get called. Since drm_sched_job_cleanup() will NULL out the s_fence, we can use that to detect this case. Signed-off-by: Rob Clark <robdclark@chromium.org> Patchwork: https://patchwork.freedesktop.org/patch/653584/ Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5df2087c9a
commit
fe2695b2f6
@@ -85,6 +85,15 @@ void __msm_gem_submit_destroy(struct kref *kref)
|
|||||||
container_of(kref, struct msm_gem_submit, ref);
|
container_of(kref, struct msm_gem_submit, ref);
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In error paths, we could unref the submit without calling
|
||||||
|
* drm_sched_entity_push_job(), so msm_job_free() will never
|
||||||
|
* get called. Since drm_sched_job_cleanup() will NULL out
|
||||||
|
* s_fence, we can use that to detect this case.
|
||||||
|
*/
|
||||||
|
if (submit->base.s_fence)
|
||||||
|
drm_sched_job_cleanup(&submit->base);
|
||||||
|
|
||||||
if (submit->fence_id) {
|
if (submit->fence_id) {
|
||||||
spin_lock(&submit->queue->idr_lock);
|
spin_lock(&submit->queue->idr_lock);
|
||||||
idr_remove(&submit->queue->fence_idr, submit->fence_id);
|
idr_remove(&submit->queue->fence_idr, submit->fence_id);
|
||||||
|
Reference in New Issue
Block a user