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

From: Wentao Liang

Date: Wed Sep 16 2026 - 15:00:06 EST


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@xxxxxxxxxxxxxxx
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
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