⬢ DragonFlyBSD Kernel Audit
DF-5220 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/i915/intel_lrc.c b/sys/dev/drm/i915/intel_lrc.c
index 0b0fdf5..50fff36 100644
--- a/sys/dev/drm/i915/intel_lrc.c
+++ b/sys/dev/drm/i915/intel_lrc.c
@@ -2494,8 +2494,11 @@ int logical_render_ring_init(struct intel_engine_cs *engine)
 	engine->emit_breadcrumb_sz = gen8_emit_breadcrumb_rcs_sz;
 
 	ret = logical_ring_init(engine);
-	if (ret)
+	if (ret) {
+		/* engine->timeline was linked by intel_engine_setup_common() */
+		intel_engine_cleanup_common(engine);
 		return ret;
+	}
 
 	ret = intel_init_workaround_bb(engine);
 	if (ret) {
@@ -2515,9 +2518,15 @@ int logical_render_ring_init(struct intel_engine_cs *engine)
 
 int logical_xcs_ring_init(struct intel_engine_cs *engine)
 {
+	int ret;
+
 	logical_ring_setup(engine);
 
-	return logical_ring_init(engine);
+	ret = logical_ring_init(engine);
+	if (ret)
+		intel_engine_cleanup_common(engine);
+
+	return ret;
 }
 
 static u32