]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
authorJinjie Ruan <ruanjinjie@huawei.com>
Wed, 30 Oct 2024 02:35:02 +0000 (10:35 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Apr 2025 08:45:07 +0000 (10:45 +0200)
[ Upstream commit caa714f86699bcfb01aa2d698db12d91af7d0d81 ]

As Maxime suggested, add a new helper
drm_kunit_display_mode_from_cea_vic(), it can replace the direct call
of drm_display_mode_from_cea_vic(), and it will help solving
the `mode` memory leaks.

Acked-by: Maxime Ripard <mripard@kernel.org>
Suggested-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241030023504.530425-2-ruanjinjie@huawei.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
Stable-dep-of: 70f29ca3117a ("drm/tests: cmdline: Fix drm_display_mode memory leak")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/tests/drm_kunit_helpers.c
include/drm/drm_kunit_helpers.h

index ca513235b5e2acf98f2944893aa06b55fe3f4ee3..9a35b2cf6a032ace7458e13b758fb7a3c8e38ac7 100644 (file)
@@ -3,6 +3,7 @@
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
+#include <drm/drm_edid.h>
 #include <drm/drm_fourcc.h>
 #include <drm/drm_kunit_helpers.h>
 #include <drm/drm_managed.h>
@@ -383,5 +384,46 @@ drm_kunit_helper_create_crtc(struct kunit *test,
 }
 EXPORT_SYMBOL_GPL(drm_kunit_helper_create_crtc);
 
+static void kunit_action_drm_mode_destroy(void *ptr)
+{
+       struct drm_display_mode *mode = ptr;
+
+       drm_mode_destroy(NULL, mode);
+}
+
+/**
+ * drm_kunit_display_mode_from_cea_vic() - return a mode for CEA VIC
+                                          for a KUnit test
+ * @test: The test context object
+ * @dev: DRM device
+ * @video_code: CEA VIC of the mode
+ *
+ * Creates a new mode matching the specified CEA VIC for a KUnit test.
+ *
+ * Resources will be cleaned up automatically.
+ *
+ * Returns: A new drm_display_mode on success or NULL on failure
+ */
+struct drm_display_mode *
+drm_kunit_display_mode_from_cea_vic(struct kunit *test, struct drm_device *dev,
+                                   u8 video_code)
+{
+       struct drm_display_mode *mode;
+       int ret;
+
+       mode = drm_display_mode_from_cea_vic(dev, video_code);
+       if (!mode)
+               return NULL;
+
+       ret = kunit_add_action_or_reset(test,
+                                       kunit_action_drm_mode_destroy,
+                                       mode);
+       if (ret)
+               return NULL;
+
+       return mode;
+}
+EXPORT_SYMBOL_GPL(drm_kunit_display_mode_from_cea_vic);
+
 MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
 MODULE_LICENSE("GPL");
index 6e99627edf45884d538b34cd973adcd3d731d047..3e5f4a23685efae863e7319aa64e9dcb4d901ee2 100644 (file)
@@ -120,4 +120,8 @@ drm_kunit_helper_create_crtc(struct kunit *test,
                             const struct drm_crtc_funcs *funcs,
                             const struct drm_crtc_helper_funcs *helper_funcs);
 
+struct drm_display_mode *
+drm_kunit_display_mode_from_cea_vic(struct kunit *test, struct drm_device *dev,
+                                   u8 video_code);
+
 #endif // DRM_KUNIT_HELPERS_H_