* [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks
@ 2025-04-08 7:34 Maxime Ripard
2025-04-08 7:34 ` [PATCH 1/7] drm/tests: helpers: Create kunit helper to destroy a drm_display_mode Maxime Ripard
` (8 more replies)
0 siblings, 9 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
Hi,
Here's a series that fixes some memory leaks in our kunit tests that
eventually show up in kmemleak.
Let me know what you think,
Maxime
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Maxime Ripard (7):
drm/tests: helpers: Create kunit helper to destroy a drm_display_mode
drm/tests: modeset: Fix drm_display_mode memory leak
drm/tests: modeset: Fix drm_display_mode memory leak
drm/tests: cmdline: Fix drm_display_mode memory leak
drm/tests: modes: Fix drm_display_mode memory leak
drm/tests: modes: Fix drm_display_mode memory leak
drm/tests: probe-helper: Fix drm_display_mode memory leak
drivers/gpu/drm/tests/drm_client_modeset_test.c | 9 ++++++++-
drivers/gpu/drm/tests/drm_cmdline_parser_test.c | 10 +++++++++-
drivers/gpu/drm/tests/drm_kunit_helpers.c | 23 ++++++++++++++++++++++
drivers/gpu/drm/tests/drm_modes_test.c | 26 +++++++++++++++++++++++++
drivers/gpu/drm/tests/drm_probe_helper_test.c | 8 +++++++-
include/drm/drm_kunit_helpers.h | 3 +++
6 files changed, 76 insertions(+), 3 deletions(-)
---
base-commit: 0af2f6be1b4281385b618cb86ad946eded089ac8
change-id: 20250408-drm-kunit-drm-display-mode-memleak-49d05334c16e
Best regards,
--
Maxime Ripard <mripard@kernel.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/7] drm/tests: helpers: Create kunit helper to destroy a drm_display_mode
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:34 ` [PATCH 2/7] drm/tests: modeset: Fix drm_display_mode memory leak Maxime Ripard
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
A number of test suites call functions that expect the returned
drm_display_mode to be destroyed eventually.
However, none of the tests called drm_mode_destroy, which results in a
memory leak.
Since drm_mode_destroy takes two pointers as argument, we can't use a
kunit wrapper. Let's just create a helper every test suite can use.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_kunit_helpers.c | 23 +++++++++++++++++++++++
include/drm/drm_kunit_helpers.h | 3 +++
2 files changed, 26 insertions(+)
diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c
index a4eb68f0decca15988105b9d58266e3871934a8b..7f540f9e4d98cc507e51b486edb99177a23011d1 100644
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
@@ -276,10 +276,33 @@ static void kunit_action_drm_mode_destroy(void *ptr)
struct drm_display_mode *mode = ptr;
drm_mode_destroy(NULL, mode);
}
+/**
+ * drm_kunit_add_mode_destroy_action() - Add a drm_destroy_mode kunit action
+ * @test: The test context object
+ * @mode: The drm_display_mode to destroy eventually
+ *
+ * Registers a kunit action that will destroy the drm_display_mode at
+ * the end of the test.
+ *
+ * If an error occurs, the drm_display_mode will be destroyed.
+ *
+ * Returns:
+ * 0 on success, an error code otherwise.
+ */
+int drm_kunit_add_mode_destroy_action(struct kunit *test,
+ struct drm_display_mode *mode)
+{
+
+ return kunit_add_action_or_reset(test,
+ kunit_action_drm_mode_destroy,
+ mode);
+}
+EXPORT_SYMBOL_GPL(drm_kunit_add_mode_destroy_action);
+
/**
* 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
diff --git a/include/drm/drm_kunit_helpers.h b/include/drm/drm_kunit_helpers.h
index 11d59ce0bac0bbec07ae5f07ed9710cf01d73f09..1c62d1d4458cae3a6883a0daaf42b8431c4a213a 100644
--- a/include/drm/drm_kunit_helpers.h
+++ b/include/drm/drm_kunit_helpers.h
@@ -116,10 +116,13 @@ drm_kunit_helper_create_crtc(struct kunit *test,
struct drm_plane *primary,
struct drm_plane *cursor,
const struct drm_crtc_funcs *funcs,
const struct drm_crtc_helper_funcs *helper_funcs);
+int drm_kunit_add_mode_destroy_action(struct kunit *test,
+ struct drm_display_mode *mode);
+
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_
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/7] drm/tests: modeset: Fix drm_display_mode memory leak
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
2025-04-08 7:34 ` [PATCH 1/7] drm/tests: helpers: Create kunit helper to destroy a drm_display_mode Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:34 ` [PATCH 3/7] " Maxime Ripard
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
drm_mode_find_dmt() returns a drm_display_mode that needs to be
destroyed later one. The drm_test_pick_cmdline_res_1920_1080_60() test
never does however, which leads to a memory leak.
Let's make sure it's freed.
Closes: https://lore.kernel.org/dri-devel/a7655158a6367ac46194d57f4b7433ef0772a73e.camel@mailbox.org/
Fixes: 8fc0380f6ba7 ("drm/client: Add some tests for drm_connector_pick_cmdline_mode()")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_client_modeset_test.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/tests/drm_client_modeset_test.c b/drivers/gpu/drm/tests/drm_client_modeset_test.c
index 7516f6cb36e4e3a1ed3a655de6f6a4479a0efade..3e9518d7b8b7eb92f1be3ce376d850cbab638d10 100644
--- a/drivers/gpu/drm/tests/drm_client_modeset_test.c
+++ b/drivers/gpu/drm/tests/drm_client_modeset_test.c
@@ -93,10 +93,13 @@ static void drm_test_pick_cmdline_res_1920_1080_60(struct kunit *test)
int ret;
expected_mode = drm_mode_find_dmt(priv->drm, 1920, 1080, 60, false);
KUNIT_ASSERT_NOT_NULL(test, expected_mode);
+ ret = drm_kunit_add_mode_destroy_action(test, expected_mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_ASSERT_TRUE(test,
drm_mode_parse_command_line_for_connector(cmdline,
connector,
cmdline_mode));
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/7] drm/tests: modeset: Fix drm_display_mode memory leak
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
2025-04-08 7:34 ` [PATCH 1/7] drm/tests: helpers: Create kunit helper to destroy a drm_display_mode Maxime Ripard
2025-04-08 7:34 ` [PATCH 2/7] drm/tests: modeset: Fix drm_display_mode memory leak Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:34 ` [PATCH 4/7] drm/tests: cmdline: " Maxime Ripard
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
drm_analog_tv_mode() and its variants return a drm_display_mode that
needs to be destroyed later one. The drm_test_pick_cmdline_named() test
never does however, which leads to a memory leak.
Let's make sure it's freed.
Closes: https://lore.kernel.org/dri-devel/a7655158a6367ac46194d57f4b7433ef0772a73e.camel@mailbox.org/
Fixes: fedcaf726f54 ("drm/modes: Properly generate a drm_display_mode from a named mode")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_client_modeset_test.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tests/drm_client_modeset_test.c b/drivers/gpu/drm/tests/drm_client_modeset_test.c
index 3e9518d7b8b7eb92f1be3ce376d850cbab638d10..b2fdb1a774fe69c4e14b718324d7380f900bd548 100644
--- a/drivers/gpu/drm/tests/drm_client_modeset_test.c
+++ b/drivers/gpu/drm/tests/drm_client_modeset_test.c
@@ -130,11 +130,12 @@ static void drm_test_pick_cmdline_named(struct kunit *test)
const struct drm_connector_pick_cmdline_mode_test *params = test->param_value;
struct drm_client_modeset_test_priv *priv = test->priv;
struct drm_device *drm = priv->drm;
struct drm_connector *connector = &priv->connector;
struct drm_cmdline_mode *cmdline_mode = &connector->cmdline_mode;
- const struct drm_display_mode *expected_mode, *mode;
+ const struct drm_display_mode *mode;
+ struct drm_display_mode *expected_mode;
const char *cmdline = params->cmdline;
int ret;
KUNIT_ASSERT_TRUE(test,
drm_mode_parse_command_line_for_connector(cmdline,
@@ -150,10 +151,13 @@ static void drm_test_pick_cmdline_named(struct kunit *test)
KUNIT_ASSERT_NOT_NULL(test, mode);
expected_mode = params->func(drm);
KUNIT_ASSERT_NOT_NULL(test, expected_mode);
+ ret = drm_kunit_add_mode_destroy_action(test, expected_mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_EXPECT_TRUE(test, drm_mode_equal(expected_mode, mode));
}
static const
struct drm_connector_pick_cmdline_mode_test drm_connector_pick_cmdline_mode_tests[] = {
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/7] drm/tests: cmdline: Fix drm_display_mode memory leak
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
` (2 preceding siblings ...)
2025-04-08 7:34 ` [PATCH 3/7] " Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:34 ` [PATCH 5/7] drm/tests: modes: " Maxime Ripard
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
drm_analog_tv_mode() and its variants return a drm_display_mode that
needs to be destroyed later one. The drm_test_cmdline_tv_options() test
never does however, which leads to a memory leak.
Let's make sure it's freed.
Closes: https://lore.kernel.org/dri-devel/a7655158a6367ac46194d57f4b7433ef0772a73e.camel@mailbox.org/
Fixes: e691c9992ae1 ("drm/modes: Introduce the tv_mode property as a command-line option")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_cmdline_parser_test.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tests/drm_cmdline_parser_test.c b/drivers/gpu/drm/tests/drm_cmdline_parser_test.c
index 59c8408c453c2ef8f18c7c887b0405418e9e1f99..1cfcb597b088b4d159a5fb10a309338cb73abbe9 100644
--- a/drivers/gpu/drm/tests/drm_cmdline_parser_test.c
+++ b/drivers/gpu/drm/tests/drm_cmdline_parser_test.c
@@ -5,10 +5,11 @@
*/
#include <kunit/test.h>
#include <drm/drm_connector.h>
+#include <drm/drm_kunit_helpers.h>
#include <drm/drm_modes.h>
static const struct drm_connector no_connector = {};
static void drm_test_cmdline_force_e_only(struct kunit *test)
@@ -953,12 +954,19 @@ struct drm_cmdline_tv_option_test {
};
static void drm_test_cmdline_tv_options(struct kunit *test)
{
const struct drm_cmdline_tv_option_test *params = test->param_value;
- const struct drm_display_mode *expected_mode = params->mode_fn(NULL);
+ struct drm_display_mode *expected_mode;
struct drm_cmdline_mode mode = { };
+ int ret;
+
+ expected_mode = params->mode_fn(NULL);
+ KUNIT_ASSERT_NOT_NULL(test, expected_mode);
+
+ ret = drm_kunit_add_mode_destroy_action(test, expected_mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(params->cmdline,
&no_connector, &mode));
KUNIT_EXPECT_TRUE(test, mode.specified);
KUNIT_EXPECT_EQ(test, mode.xres, expected_mode->hdisplay);
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/7] drm/tests: modes: Fix drm_display_mode memory leak
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
` (3 preceding siblings ...)
2025-04-08 7:34 ` [PATCH 4/7] drm/tests: cmdline: " Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:34 ` [PATCH 6/7] " Maxime Ripard
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
drm_analog_tv_mode() and its variants return a drm_display_mode that
needs to be destroyed later one. The drm_modes_analog_tv tests never
do however, which leads to a memory leak.
Let's make sure it's freed.
Closes: https://lore.kernel.org/dri-devel/a7655158a6367ac46194d57f4b7433ef0772a73e.camel@mailbox.org/
Fixes: 4fcd238560ee ("drm/modes: Add a function to generate analog display modes")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_modes_test.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/gpu/drm/tests/drm_modes_test.c b/drivers/gpu/drm/tests/drm_modes_test.c
index 6ed51f99e133c96db7c1deafea9be1c00eebe7a1..7ba646d87856f52f99b0f9bcfed0c31d848c798d 100644
--- a/drivers/gpu/drm/tests/drm_modes_test.c
+++ b/drivers/gpu/drm/tests/drm_modes_test.c
@@ -38,17 +38,21 @@ static int drm_test_modes_init(struct kunit *test)
static void drm_test_modes_analog_tv_ntsc_480i(struct kunit *test)
{
struct drm_test_modes_priv *priv = test->priv;
struct drm_display_mode *mode;
+ int ret;
mode = drm_analog_tv_mode(priv->drm,
DRM_MODE_TV_MODE_NTSC,
13500 * HZ_PER_KHZ, 720, 480,
true);
KUNIT_ASSERT_NOT_NULL(test, mode);
+ ret = drm_kunit_add_mode_destroy_action(test, mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 60);
KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);
/* BT.601 defines hsync_start at 736 for 480i */
KUNIT_EXPECT_EQ(test, mode->hsync_start, 736);
@@ -68,34 +72,45 @@ static void drm_test_modes_analog_tv_ntsc_480i(struct kunit *test)
static void drm_test_modes_analog_tv_ntsc_480i_inlined(struct kunit *test)
{
struct drm_test_modes_priv *priv = test->priv;
struct drm_display_mode *expected, *mode;
+ int ret;
expected = drm_analog_tv_mode(priv->drm,
DRM_MODE_TV_MODE_NTSC,
13500 * HZ_PER_KHZ, 720, 480,
true);
KUNIT_ASSERT_NOT_NULL(test, expected);
+ ret = drm_kunit_add_mode_destroy_action(test, expected);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
mode = drm_mode_analog_ntsc_480i(priv->drm);
KUNIT_ASSERT_NOT_NULL(test, mode);
+ ret = drm_kunit_add_mode_destroy_action(test, mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_EXPECT_TRUE(test, drm_mode_equal(expected, mode));
}
static void drm_test_modes_analog_tv_pal_576i(struct kunit *test)
{
struct drm_test_modes_priv *priv = test->priv;
struct drm_display_mode *mode;
+ int ret;
mode = drm_analog_tv_mode(priv->drm,
DRM_MODE_TV_MODE_PAL,
13500 * HZ_PER_KHZ, 720, 576,
true);
KUNIT_ASSERT_NOT_NULL(test, mode);
+ ret = drm_kunit_add_mode_destroy_action(test, mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 50);
KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);
/* BT.601 defines hsync_start at 732 for 576i */
KUNIT_EXPECT_EQ(test, mode->hsync_start, 732);
@@ -115,20 +130,27 @@ static void drm_test_modes_analog_tv_pal_576i(struct kunit *test)
static void drm_test_modes_analog_tv_pal_576i_inlined(struct kunit *test)
{
struct drm_test_modes_priv *priv = test->priv;
struct drm_display_mode *expected, *mode;
+ int ret;
expected = drm_analog_tv_mode(priv->drm,
DRM_MODE_TV_MODE_PAL,
13500 * HZ_PER_KHZ, 720, 576,
true);
KUNIT_ASSERT_NOT_NULL(test, expected);
+ ret = drm_kunit_add_mode_destroy_action(test, expected);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
mode = drm_mode_analog_pal_576i(priv->drm);
KUNIT_ASSERT_NOT_NULL(test, mode);
+ ret = drm_kunit_add_mode_destroy_action(test, mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_EXPECT_TRUE(test, drm_mode_equal(expected, mode));
}
static void drm_test_modes_analog_tv_mono_576i(struct kunit *test)
{
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 6/7] drm/tests: modes: Fix drm_display_mode memory leak
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
` (4 preceding siblings ...)
2025-04-08 7:34 ` [PATCH 5/7] drm/tests: modes: " Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:34 ` [PATCH 7/7] drm/tests: probe-helper: " Maxime Ripard
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
drm_analog_tv_mode() and its variants return a drm_display_mode that
needs to be destroyed later one. The
drm_test_modes_analog_tv_mono_576i() test never does however, which
leads to a memory leak.
Let's make sure it's freed.
Closes: https://lore.kernel.org/dri-devel/a7655158a6367ac46194d57f4b7433ef0772a73e.camel@mailbox.org/
Fixes: e31538489908 ("drm/tests: Add tests for the new Monochrome value of tv_mode")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_modes_test.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/tests/drm_modes_test.c b/drivers/gpu/drm/tests/drm_modes_test.c
index 7ba646d87856f52f99b0f9bcfed0c31d848c798d..f5b20f92df8be73ad9ef46aedae8b855e637e4dd 100644
--- a/drivers/gpu/drm/tests/drm_modes_test.c
+++ b/drivers/gpu/drm/tests/drm_modes_test.c
@@ -154,17 +154,21 @@ static void drm_test_modes_analog_tv_pal_576i_inlined(struct kunit *test)
static void drm_test_modes_analog_tv_mono_576i(struct kunit *test)
{
struct drm_test_modes_priv *priv = test->priv;
struct drm_display_mode *mode;
+ int ret;
mode = drm_analog_tv_mode(priv->drm,
DRM_MODE_TV_MODE_MONOCHROME,
13500 * HZ_PER_KHZ, 720, 576,
true);
KUNIT_ASSERT_NOT_NULL(test, mode);
+ ret = drm_kunit_add_mode_destroy_action(test, mode);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 50);
KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);
/* BT.601 defines hsync_start at 732 for 576i */
KUNIT_EXPECT_EQ(test, mode->hsync_start, 732);
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 7/7] drm/tests: probe-helper: Fix drm_display_mode memory leak
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
` (5 preceding siblings ...)
2025-04-08 7:34 ` [PATCH 6/7] " Maxime Ripard
@ 2025-04-08 7:34 ` Maxime Ripard
2025-04-08 7:56 ` [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Thomas Zimmermann
2025-04-08 15:34 ` Maxime Ripard
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 7:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel, Maxime Ripard
drm_analog_tv_mode() and its variants return a drm_display_mode that
needs to be destroyed later one. The
drm_test_connector_helper_tv_get_modes_check() test never does however,
which leads to a memory leak.
Let's make sure it's freed.
Closes: https://lore.kernel.org/dri-devel/a7655158a6367ac46194d57f4b7433ef0772a73e.camel@mailbox.org/
Fixes: 1e4a91db109f ("drm/probe-helper: Provide a TV get_modes helper")
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/tests/drm_probe_helper_test.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tests/drm_probe_helper_test.c b/drivers/gpu/drm/tests/drm_probe_helper_test.c
index bc09ff38aca18eb06dc476310e1dbf372bc5545c..db0e4f5df275e8473ec916ed7a7cf16db96b81c5 100644
--- a/drivers/gpu/drm/tests/drm_probe_helper_test.c
+++ b/drivers/gpu/drm/tests/drm_probe_helper_test.c
@@ -96,11 +96,11 @@ drm_test_connector_helper_tv_get_modes_check(struct kunit *test)
const struct drm_connector_helper_tv_get_modes_test *params = test->param_value;
struct drm_probe_helper_test_priv *priv = test->priv;
struct drm_connector *connector = &priv->connector;
struct drm_cmdline_mode *cmdline = &connector->cmdline_mode;
struct drm_display_mode *mode;
- const struct drm_display_mode *expected;
+ struct drm_display_mode *expected;
size_t len;
int ret;
if (params->cmdline) {
cmdline->tv_mode_specified = true;
@@ -132,10 +132,13 @@ drm_test_connector_helper_tv_get_modes_check(struct kunit *test)
expected = params->expected_modes[0](priv->drm);
KUNIT_ASSERT_NOT_NULL(test, expected);
KUNIT_EXPECT_TRUE(test, drm_mode_equal(mode, expected));
KUNIT_EXPECT_TRUE(test, mode->type & DRM_MODE_TYPE_PREFERRED);
+
+ ret = drm_kunit_add_mode_destroy_action(test, expected);
+ KUNIT_ASSERT_EQ(test, ret, 0);
}
if (params->num_expected_modes >= 2) {
mode = list_next_entry(mode, head);
KUNIT_ASSERT_NOT_NULL(test, mode);
@@ -143,10 +146,13 @@ drm_test_connector_helper_tv_get_modes_check(struct kunit *test)
expected = params->expected_modes[1](priv->drm);
KUNIT_ASSERT_NOT_NULL(test, expected);
KUNIT_EXPECT_TRUE(test, drm_mode_equal(mode, expected));
KUNIT_EXPECT_FALSE(test, mode->type & DRM_MODE_TYPE_PREFERRED);
+
+ ret = drm_kunit_add_mode_destroy_action(test, expected);
+ KUNIT_ASSERT_EQ(test, ret, 0);
}
mutex_unlock(&priv->drm->mode_config.mutex);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
` (6 preceding siblings ...)
2025-04-08 7:34 ` [PATCH 7/7] drm/tests: probe-helper: " Maxime Ripard
@ 2025-04-08 7:56 ` Thomas Zimmermann
2025-04-08 15:34 ` Maxime Ripard
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Zimmermann @ 2025-04-08 7:56 UTC (permalink / raw)
To: Maxime Ripard, Maarten Lankhorst, David Airlie, Simona Vetter
Cc: Philipp Stanner, dri-devel, linux-kernel
Am 08.04.25 um 09:34 schrieb Maxime Ripard:
> Hi,
>
> Here's a series that fixes some memory leaks in our kunit tests that
> eventually show up in kmemleak.
>
> Let me know what you think,
> Maxime
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
On the series:
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> Maxime Ripard (7):
> drm/tests: helpers: Create kunit helper to destroy a drm_display_mode
> drm/tests: modeset: Fix drm_display_mode memory leak
> drm/tests: modeset: Fix drm_display_mode memory leak
> drm/tests: cmdline: Fix drm_display_mode memory leak
> drm/tests: modes: Fix drm_display_mode memory leak
> drm/tests: modes: Fix drm_display_mode memory leak
> drm/tests: probe-helper: Fix drm_display_mode memory leak
>
> drivers/gpu/drm/tests/drm_client_modeset_test.c | 9 ++++++++-
> drivers/gpu/drm/tests/drm_cmdline_parser_test.c | 10 +++++++++-
> drivers/gpu/drm/tests/drm_kunit_helpers.c | 23 ++++++++++++++++++++++
> drivers/gpu/drm/tests/drm_modes_test.c | 26 +++++++++++++++++++++++++
> drivers/gpu/drm/tests/drm_probe_helper_test.c | 8 +++++++-
> include/drm/drm_kunit_helpers.h | 3 +++
> 6 files changed, 76 insertions(+), 3 deletions(-)
> ---
> base-commit: 0af2f6be1b4281385b618cb86ad946eded089ac8
> change-id: 20250408-drm-kunit-drm-display-mode-memleak-49d05334c16e
>
> Best regards,
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
` (7 preceding siblings ...)
2025-04-08 7:56 ` [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Thomas Zimmermann
@ 2025-04-08 15:34 ` Maxime Ripard
8 siblings, 0 replies; 10+ messages in thread
From: Maxime Ripard @ 2025-04-08 15:34 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
Maxime Ripard
Cc: Philipp Stanner, dri-devel, linux-kernel
On Tue, 08 Apr 2025 09:34:06 +0200, Maxime Ripard wrote:
> Here's a series that fixes some memory leaks in our kunit tests that
> eventually show up in kmemleak.
>
> Let me know what you think,
> Maxime
>
>
> [...]
Applied to misc/kernel.git (drm-misc-fixes).
Thanks!
Maxime
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-04-08 15:34 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-08 7:34 [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Maxime Ripard
2025-04-08 7:34 ` [PATCH 1/7] drm/tests: helpers: Create kunit helper to destroy a drm_display_mode Maxime Ripard
2025-04-08 7:34 ` [PATCH 2/7] drm/tests: modeset: Fix drm_display_mode memory leak Maxime Ripard
2025-04-08 7:34 ` [PATCH 3/7] " Maxime Ripard
2025-04-08 7:34 ` [PATCH 4/7] drm/tests: cmdline: " Maxime Ripard
2025-04-08 7:34 ` [PATCH 5/7] drm/tests: modes: " Maxime Ripard
2025-04-08 7:34 ` [PATCH 6/7] " Maxime Ripard
2025-04-08 7:34 ` [PATCH 7/7] drm/tests: probe-helper: " Maxime Ripard
2025-04-08 7:56 ` [PATCH 0/7] drm/tests: Fix drm_display_mode memory leaks Thomas Zimmermann
2025-04-08 15:34 ` Maxime Ripard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox