drm: Warn when freeing a framebuffer that's still on a list
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 11 Dec 2023 08:16:25 +0000 (10:16 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Sat, 23 Dec 2023 05:31:29 +0000 (07:31 +0200)
Sprinkle some extra WARNs around so that we might catch
premature framebuffer destruction more readily.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231211081625.25704-2-ville.syrjala@linux.intel.com
Acked-by: Javier Martinez Canillas <javierm@redhat.com>
drivers/gpu/drm/drm_framebuffer.c

index 3cc0ffc28e862158d16a26255efa8d87302283f8..888aadb6a4acbb727f08b8f353c59856dc595808 100644 (file)
@@ -461,6 +461,7 @@ int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
 
                INIT_WORK_ONSTACK(&arg.work, drm_mode_rmfb_work_fn);
                INIT_LIST_HEAD(&arg.fbs);
+               drm_WARN_ON(dev, !list_empty(&fb->filp_head));
                list_add_tail(&fb->filp_head, &arg.fbs);
 
                schedule_work(&arg.work);
@@ -827,6 +828,8 @@ void drm_framebuffer_free(struct kref *kref)
                        container_of(kref, struct drm_framebuffer, base.refcount);
        struct drm_device *dev = fb->dev;
 
+       drm_WARN_ON(dev, !list_empty(&fb->filp_head));
+
        /*
         * The lookup idr holds a weak reference, which has not necessarily been
         * removed at this point. Check for that.
@@ -1119,7 +1122,7 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
 
        dev = fb->dev;
 
-       WARN_ON(!list_empty(&fb->filp_head));
+       drm_WARN_ON(dev, !list_empty(&fb->filp_head));
 
        /*
         * drm ABI mandates that we remove any deleted framebuffers from active