From: Michel Dänzer <mdaen...@redhat.com>

Signed-off-by: Michel Dänzer <mdaen...@redhat.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 14 ++++++++++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.h  |  3 +++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index 514a5b2159815..89bda2a2baf58 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -531,6 +531,15 @@ bool amdgpu_display_ddc_probe(struct amdgpu_connector 
*amdgpu_connector,
        return true;
 }
 
+static void
+amdgpu_fb_destroy(struct drm_framebuffer *fb)
+{
+       struct amdgpu_bo *bo = gem_to_amdgpu_bo(fb->obj[0]);
+
+       atomic_dec(&bo->num_fbs);
+       drm_gem_fb_destroy(fb);
+}
+
 static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct drm_file *file,
                          unsigned int flags, unsigned int color,
                          struct drm_clip_rect *clips, unsigned int num_clips)
@@ -544,12 +553,12 @@ static int amdgpu_dirtyfb(struct drm_framebuffer *fb, 
struct drm_file *file,
 }
 
 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
 };
@@ -1306,6 +1315,7 @@ amdgpu_display_user_framebuffer_create(struct drm_device 
*dev,
                return ERR_PTR(ret);
        }
 
+       atomic_inc(&bo->num_fbs);
        drm_gem_object_put(obj);
        return &amdgpu_fb->base;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
index a3ea8a82db23a..47579a6eb2ae8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -117,6 +117,9 @@ struct amdgpu_bo {
         * for memory accounting.
         */
        int8_t                          xcp_id;
+
+       /* Number of KMS FBs using this BO */
+       atomic_t                        num_fbs;
 };
 
 struct amdgpu_bo_user {
-- 
2.43.0

Reply via email to