From 70cd1f2c476f7d3a01189dddaa8077b96b8497c7 Mon Sep 17 00:00:00 2001
From: Thomas Zimmermann <tzimmermann@suse.de>
Date: Thu, 3 Jul 2025 17:00:19 +0200
Subject: [PATCH 01/10] drm/amdgpu: Provide custom framebuffer destroy function

Change amdgpu's framebuffer destroy function from drm_gem_fb_destroy()
to a custom implementation. The former references GEM handles, while
the driver references GEM objects. The custom helper fixes this.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index 35c778426a7c..dc03e52c7690 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -545,13 +545,24 @@ static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct drm_file *file,
 					 num_clips);
 }
 
+static void amdgpu_fb_destroy(struct drm_framebuffer *fb)
+{
+	unsigned int i;
+
+	for (i = 0; i < fb->format->num_planes; i++)
+		drm_gem_object_put(fb->obj[i]);
+
+	drm_framebuffer_cleanup(fb);
+	kfree(fb);
+}
+
 static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
-	.destroy = drm_gem_fb_destroy,
+	.destroy = amdgpu_fb_destroy,
 	.create_handle = drm_gem_fb_create_handle,
 };
 
 static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {
-	.destroy = drm_gem_fb_destroy,
+	.destroy = amdgpu_fb_destroy,
 	.create_handle = drm_gem_fb_create_handle,
 	.dirty = amdgpu_dirtyfb
 };
-- 
2.50.0

