[PATCH 2/2] fb-obj

Chris Wilson chris at chris-wilson.co.uk
Wed May 27 20:34:10 UTC 2020


---
 drivers/gpu/drm/i915/display/intel_display.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 37c28e97069e..73ff88a8636c 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -17040,8 +17040,11 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
 static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
 {
 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
+	int i;
 
 	drm_framebuffer_cleanup(fb);
+	for (i = 0; i < fb->format->num_planes; i++)
+		__drm_gem_object_put(fb->obj[i]);
 	intel_frontbuffer_put(intel_fb->frontbuffer);
 
 	kfree(intel_fb);
@@ -17186,7 +17189,7 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 		if (mode_cmd->handles[i] != mode_cmd->handles[0]) {
 			drm_dbg_kms(&dev_priv->drm, "bad plane %d handle\n",
 				    i);
-			goto err;
+			goto err_obj;
 		}
 
 		stride_alignment = intel_fb_stride_alignment(fb, i);
@@ -17194,7 +17197,7 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 			drm_dbg_kms(&dev_priv->drm,
 				    "plane %d pitch (%d) must be at least %u byte aligned\n",
 				    i, fb->pitches[i], stride_alignment);
-			goto err;
+			goto err_obj;
 		}
 
 		if (is_gen12_ccs_plane(fb, i)) {
@@ -17205,25 +17208,28 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 					    "ccs aux plane %d pitch (%d) must be %d\n",
 					    i,
 					    fb->pitches[i], ccs_aux_stride);
-				goto err;
+				goto err_obj;
 			}
 		}
 
-		fb->obj[i] = &obj->base;
+		fb->obj[i] = &i915_gem_object_get(obj)->base;
 	}
 
 	ret = intel_fill_fb_info(dev_priv, fb);
 	if (ret)
-		goto err;
+		goto err_obj;
 
 	ret = drm_framebuffer_init(&dev_priv->drm, fb, &intel_fb_funcs);
 	if (ret) {
 		drm_err(&dev_priv->drm, "framebuffer init failed %d\n", ret);
-		goto err;
+		goto err_obj;
 	}
 
 	return 0;
 
+err_obj:
+	while (i-- > 0)
+		__drm_gem_object_put(fb->obj[i]);
 err:
 	intel_frontbuffer_put(intel_fb->frontbuffer);
 	return ret;
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list