[PATCH] drm/i915/guc: Fix sched_engine reference leak in guc_create_virtual()

Wentao Liang posted 1 patch 1 week, 1 day ago
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] drm/i915/guc: Fix sched_engine reference leak in guc_create_virtual()
Posted by Wentao Liang 1 week, 1 day ago
guc_create_virtual() takes a reference on guc->sched_engine for the
virtual engine, mirroring execlists, but the GuC destroy path never
drops it; rcu_virtual_context_destroy() does. Release the reference in
__guc_context_destroy() alongside the breadcrumbs reference.

Fixes: 556120256ecd ("drm/i915/guc: GuC virtual engines")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
 drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 788e59cdfac9..7b88e081c76d 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -3487,6 +3487,8 @@ static void __guc_context_destroy(struct intel_context *ce)
 
 		if (ve->base.breadcrumbs)
 			intel_breadcrumbs_put(ve->base.breadcrumbs);
+		if (ve->base.sched_engine)
+			i915_sched_engine_put(ve->base.sched_engine);
 
 		kfree(ve);
 	} else {
-- 
2.34.1