mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/4] drm: Fix some memory leaks
@ 2024-10-14 12:52 Jinjie Ruan
  2024-10-14 12:52 ` [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic() Jinjie Ruan
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-14 12:52 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, ruanjinjie, quic_jjohnson, skhan, davidgow,
	karolina.stolarek, Arunpravin.PaneerSelvam, thomas.hellstrom,
	asomalap, dri-devel, linux-kernel

Fix some memory leaks in drm.

Changes in v2:
- Fix it with new introduced helper instead of drm_mode_destroy().
- Update the commit message.
- Add Reviewed-by.

Jinjie Ruan (4):
  drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
  drm/connector: hdmi: Fix memory leak in
    drm_display_mode_from_cea_vic()
  drm/ttm/tests: Fix memory leak in ttm_tt_simple_create()
  drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic()

 drivers/gpu/drm/tests/drm_connector_test.c    | 24 +++++------
 .../drm/tests/drm_hdmi_state_helper_test.c    |  8 ++--
 drivers/gpu/drm/tests/drm_kunit_helpers.c     | 40 +++++++++++++++++++
 drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c |  1 +
 include/drm/drm_kunit_helpers.h               |  6 +++
 5 files changed, 63 insertions(+), 16 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
  2024-10-14 12:52 [PATCH v2 0/4] drm: Fix some memory leaks Jinjie Ruan
@ 2024-10-14 12:52 ` Jinjie Ruan
  2024-10-16  9:35   ` Maxime Ripard
  2024-10-14 12:52 ` [PATCH v2 2/4] drm/connector: hdmi: Fix memory leak in drm_display_mode_from_cea_vic() Jinjie Ruan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-14 12:52 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, ruanjinjie, quic_jjohnson, skhan, davidgow,
	karolina.stolarek, Arunpravin.PaneerSelvam, thomas.hellstrom,
	asomalap, dri-devel, linux-kernel

As Maxime suggested, add a new helper
drm_kunit_helper_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.

Suggested-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
---
 drivers/gpu/drm/tests/drm_kunit_helpers.c | 40 +++++++++++++++++++++++
 include/drm/drm_kunit_helpers.h           |  6 ++++
 2 files changed, 46 insertions(+)

diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c
index aa62719dab0e..dc70bafcd394 100644
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
@@ -311,6 +311,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_helper_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_helper_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);
+
+	ret = kunit_add_action_or_reset(test,
+					kunit_action_drm_mode_destroy,
+					mode);
+	if (ret)
+		return NULL;
+
+	return mode;
+}
+EXPORT_SYMBOL_GPL(drm_kunit_helper_display_mode_from_cea_vic);
+
 MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
 MODULE_DESCRIPTION("KUnit test suite helper functions");
 MODULE_LICENSE("GPL");
diff --git a/include/drm/drm_kunit_helpers.h b/include/drm/drm_kunit_helpers.h
index e7cc17ee4934..1e7fd4be550c 100644
--- a/include/drm/drm_kunit_helpers.h
+++ b/include/drm/drm_kunit_helpers.h
@@ -4,6 +4,7 @@
 #define DRM_KUNIT_HELPERS_H_
 
 #include <drm/drm_drv.h>
+#include <drm/drm_edid.h>
 
 #include <linux/device.h>
 
@@ -120,4 +121,9 @@ 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_helper_display_mode_from_cea_vic(struct kunit *test,
+					   struct drm_device *dev,
+					   u8 video_code);
+
 #endif // DRM_KUNIT_HELPERS_H_
-- 
2.34.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 2/4] drm/connector: hdmi: Fix memory leak in drm_display_mode_from_cea_vic()
  2024-10-14 12:52 [PATCH v2 0/4] drm: Fix some memory leaks Jinjie Ruan
  2024-10-14 12:52 ` [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic() Jinjie Ruan
@ 2024-10-14 12:52 ` Jinjie Ruan
  2024-10-16  9:36   ` mripard
  2024-10-14 12:52 ` [PATCH v2 3/4] drm/ttm/tests: Fix memory leak in ttm_tt_simple_create() Jinjie Ruan
  2024-10-14 12:52 ` [PATCH v2 4/4] drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic() Jinjie Ruan
  3 siblings, 1 reply; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-14 12:52 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, ruanjinjie, quic_jjohnson, skhan, davidgow,
	karolina.stolarek, Arunpravin.PaneerSelvam, thomas.hellstrom,
	asomalap, dri-devel, linux-kernel

modprobe drm_connector_test and then rmmod drm_connector_test,
the following memory leak occurs.

The `mode` allocated in drm_mode_duplicate() called by
drm_display_mode_from_cea_vic() is not freed, which cause the memory leak:

	unreferenced object 0xffffff80cb0ee400 (size 128):
	  comm "kunit_try_catch", pid 1948, jiffies 4294950339
	  hex dump (first 32 bytes):
	    14 44 02 00 80 07 d8 07 04 08 98 08 00 00 38 04  .D............8.
	    3c 04 41 04 65 04 00 00 05 00 00 00 00 00 00 00  <.A.e...........
	  backtrace (crc 90e9585c):
	    [<00000000ec42e3d7>] kmemleak_alloc+0x34/0x40
	    [<00000000d0ef055a>] __kmalloc_cache_noprof+0x26c/0x2f4
	    [<00000000c2062161>] drm_mode_duplicate+0x44/0x19c
	    [<00000000f96c74aa>] drm_display_mode_from_cea_vic+0x88/0x98
	    [<00000000d8f2c8b4>] 0xffffffdc982a4868
	    [<000000005d164dbc>] kunit_try_run_case+0x13c/0x3ac
	    [<000000006fb23398>] kunit_generic_run_threadfn_adapter+0x80/0xec
	    [<000000006ea56ca0>] kthread+0x2e8/0x374
	    [<000000000676063f>] ret_from_fork+0x10/0x20
	......

Free `mode` by using drm_kunit_helper_display_mode_from_cea_vic()
to fix it.

Cc: stable@vger.kernel.org
Fixes: abb6f74973e2 ("drm/tests: Add HDMI TDMS character rate tests")
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
---
v2:
- Fix it with new introduced helper instead of drm_mode_destroy().
- Update the commit message.
---
 drivers/gpu/drm/tests/drm_connector_test.c | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/tests/drm_connector_test.c b/drivers/gpu/drm/tests/drm_connector_test.c
index 15e36a8db685..e12b39dc4fe7 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -996,7 +996,7 @@ static void drm_test_drm_hdmi_compute_mode_clock_rgb(struct kunit *test)
 	unsigned long long rate;
 	struct drm_device *drm = &priv->drm;
 
-	mode = drm_display_mode_from_cea_vic(drm, 16);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 16);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1017,7 +1017,7 @@ static void drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc(struct kunit *test)
 	unsigned long long rate;
 	struct drm_device *drm = &priv->drm;
 
-	mode = drm_display_mode_from_cea_vic(drm, 16);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 16);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1038,7 +1038,7 @@ static void drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1(struct kunit *t
 	unsigned long long rate;
 	struct drm_device *drm = &priv->drm;
 
-	mode = drm_display_mode_from_cea_vic(drm, 1);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 1);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	rate = drm_hdmi_compute_mode_clock(mode, 10, HDMI_COLORSPACE_RGB);
@@ -1056,7 +1056,7 @@ static void drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc(struct kunit *test)
 	unsigned long long rate;
 	struct drm_device *drm = &priv->drm;
 
-	mode = drm_display_mode_from_cea_vic(drm, 16);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 16);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1077,7 +1077,7 @@ static void drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1(struct kunit *t
 	unsigned long long rate;
 	struct drm_device *drm = &priv->drm;
 
-	mode = drm_display_mode_from_cea_vic(drm, 1);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 1);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	rate = drm_hdmi_compute_mode_clock(mode, 12, HDMI_COLORSPACE_RGB);
@@ -1095,7 +1095,7 @@ static void drm_test_drm_hdmi_compute_mode_clock_rgb_double(struct kunit *test)
 	unsigned long long rate;
 	struct drm_device *drm = &priv->drm;
 
-	mode = drm_display_mode_from_cea_vic(drm, 6);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 6);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_TRUE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1118,7 +1118,7 @@ static void drm_test_connector_hdmi_compute_mode_clock_yuv420_valid(struct kunit
 	unsigned long long rate;
 	unsigned int vic = *(unsigned int *)test->param_value;
 
-	mode = drm_display_mode_from_cea_vic(drm, vic);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, vic);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1155,7 +1155,7 @@ static void drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc(struct kuni
 		drm_hdmi_compute_mode_clock_yuv420_vic_valid_tests[0];
 	unsigned long long rate;
 
-	mode = drm_display_mode_from_cea_vic(drm, vic);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, vic);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1180,7 +1180,7 @@ static void drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc(struct kuni
 		drm_hdmi_compute_mode_clock_yuv420_vic_valid_tests[0];
 	unsigned long long rate;
 
-	mode = drm_display_mode_from_cea_vic(drm, vic);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, vic);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1203,7 +1203,7 @@ static void drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc(struct kunit
 	struct drm_device *drm = &priv->drm;
 	unsigned long long rate;
 
-	mode = drm_display_mode_from_cea_vic(drm, 16);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 16);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1225,7 +1225,7 @@ static void drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc(struct kuni
 	struct drm_device *drm = &priv->drm;
 	unsigned long long rate;
 
-	mode = drm_display_mode_from_cea_vic(drm, 16);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 16);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1247,7 +1247,7 @@ static void drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc(struct kuni
 	struct drm_device *drm = &priv->drm;
 	unsigned long long rate;
 
-	mode = drm_display_mode_from_cea_vic(drm, 16);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 16);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	KUNIT_ASSERT_FALSE(test, mode->flags & DRM_MODE_FLAG_DBLCLK);
-- 
2.34.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 3/4] drm/ttm/tests: Fix memory leak in ttm_tt_simple_create()
  2024-10-14 12:52 [PATCH v2 0/4] drm: Fix some memory leaks Jinjie Ruan
  2024-10-14 12:52 ` [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic() Jinjie Ruan
  2024-10-14 12:52 ` [PATCH v2 2/4] drm/connector: hdmi: Fix memory leak in drm_display_mode_from_cea_vic() Jinjie Ruan
@ 2024-10-14 12:52 ` Jinjie Ruan
  2024-10-14 13:38   ` Jeff Johnson
  2024-10-14 12:52 ` [PATCH v2 4/4] drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic() Jinjie Ruan
  3 siblings, 1 reply; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-14 12:52 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, ruanjinjie, quic_jjohnson, skhan, davidgow,
	karolina.stolarek, Arunpravin.PaneerSelvam, thomas.hellstrom,
	asomalap, dri-devel, linux-kernel

modprobe ttm_device_test and then rmmod ttm_device_test, the fllowing
memory leaks occurs:

The ttm->pages allocated in ttm_tt_init() is not freed after calling
ttm_tt_simple_create(), which cause the memory leak:

	unreferenced object 0xffffff80caf27750 (size 8):
	  comm "kunit_try_catch", pid 2242, jiffies 4295055735
	  hex dump (first 8 bytes):
	    c0 1e 3d c3 fe ff ff ff                          ..=.....
	  backtrace (crc 3d11615a):
	    [<000000007f57312a>] kmemleak_alloc+0x34/0x40
	    [<000000008c6c4c7e>] __kmalloc_node_noprof+0x304/0x3e4
	    [<00000000679c1182>] __kvmalloc_node_noprof+0x1c/0x144
	    [<000000006aed0a3d>] ttm_tt_init+0x138/0x28c [ttm]
	    [<000000005c331998>] drm_gem_shmem_free+0x60/0x534 [drm_shmem_helper]
	    [<0000000022b4f375>] kunit_try_run_case+0x13c/0x3ac
	    [<00000000c525d725>] kunit_generic_run_threadfn_adapter+0x80/0xec
	    [<000000002db94a1f>] kthread+0x2e8/0x374
	    [<000000002c457ad7>] ret_from_fork+0x10/0x20
	......

Fix it by calling ttm_tt_fini() in the exit function.

Cc: stable@vger.kernel.org
Fixes: e6f7c641fae3 ("drm/ttm/tests: Add tests for ttm_tt")
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
---
v2:
- Add Reviewed-by.
---
 drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c b/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
index b91c13f46225..9ff216ec58ef 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
@@ -54,6 +54,7 @@ static struct ttm_tt *ttm_tt_simple_create(struct ttm_buffer_object *bo, u32 pag
 
 static void ttm_tt_simple_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
 {
+	ttm_tt_fini(ttm);
 	kfree(ttm);
 }
 
-- 
2.34.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 4/4] drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic()
  2024-10-14 12:52 [PATCH v2 0/4] drm: Fix some memory leaks Jinjie Ruan
                   ` (2 preceding siblings ...)
  2024-10-14 12:52 ` [PATCH v2 3/4] drm/ttm/tests: Fix memory leak in ttm_tt_simple_create() Jinjie Ruan
@ 2024-10-14 12:52 ` Jinjie Ruan
  2024-10-16  9:37   ` Maxime Ripard
  3 siblings, 1 reply; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-14 12:52 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, ruanjinjie, quic_jjohnson, skhan, davidgow,
	karolina.stolarek, Arunpravin.PaneerSelvam, thomas.hellstrom,
	asomalap, dri-devel, linux-kernel

modprobe drm_hdmi_state_helper_test and then rmmod it, the following
memory leak occurs.

The `mode` allocated in drm_mode_duplicate() called by
drm_display_mode_from_cea_vic() is not freed, which cause the memory leak:

	unreferenced object 0xffffff80ccd18100 (size 128):
	  comm "kunit_try_catch", pid 1851, jiffies 4295059695
	  hex dump (first 32 bytes):
	    57 62 00 00 80 02 90 02 f0 02 20 03 00 00 e0 01  Wb........ .....
	    ea 01 ec 01 0d 02 00 00 0a 00 00 00 00 00 00 00  ................
	  backtrace (crc c2f1aa95):
	    [<000000000f10b11b>] kmemleak_alloc+0x34/0x40
	    [<000000001cd4cf73>] __kmalloc_cache_noprof+0x26c/0x2f4
	    [<00000000f1f3cffa>] drm_mode_duplicate+0x44/0x19c
	    [<000000008cbeef13>] drm_display_mode_from_cea_vic+0x88/0x98
	    [<0000000019daaacf>] 0xffffffedc11ae69c
	    [<000000000aad0f85>] kunit_try_run_case+0x13c/0x3ac
	    [<00000000a9210bac>] kunit_generic_run_threadfn_adapter+0x80/0xec
	    [<000000000a0b2e9e>] kthread+0x2e8/0x374
	    [<00000000bd668858>] ret_from_fork+0x10/0x20
	......

Free `mode` by using drm_kunit_helper_display_mode_from_cea_vic()
to fix it.

Cc: stable@vger.kernel.org
Fixes: 4af70f19e559 ("drm/tests: Add RGB Quantization tests")
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
---
v2:
- Fix it with new introduced helper instead of drm_mode_destroy().
- Update the commit message.
---
 drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
index 34ee95d41f29..bb9af542cb43 100644
--- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
+++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
@@ -441,7 +441,7 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode_vic_1(struct kunit *test)
 	ctx = drm_kunit_helper_acquire_ctx_alloc(test);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
 
-	mode = drm_display_mode_from_cea_vic(drm, 1);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 1);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	drm = &priv->drm;
@@ -555,7 +555,7 @@ static void drm_test_check_broadcast_rgb_full_cea_mode_vic_1(struct kunit *test)
 	ctx = drm_kunit_helper_acquire_ctx_alloc(test);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
 
-	mode = drm_display_mode_from_cea_vic(drm, 1);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 1);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	drm = &priv->drm;
@@ -671,7 +671,7 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode_vic_1(struct kunit *te
 	ctx = drm_kunit_helper_acquire_ctx_alloc(test);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
 
-	mode = drm_display_mode_from_cea_vic(drm, 1);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 1);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	drm = &priv->drm;
@@ -1263,7 +1263,7 @@ static void drm_test_check_output_bpc_format_vic_1(struct kunit *test)
 	ctx = drm_kunit_helper_acquire_ctx_alloc(test);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
 
-	mode = drm_display_mode_from_cea_vic(drm, 1);
+	mode = drm_kunit_helper_display_mode_from_cea_vic(test, drm, 1);
 	KUNIT_ASSERT_NOT_NULL(test, mode);
 
 	/*
-- 
2.34.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 3/4] drm/ttm/tests: Fix memory leak in ttm_tt_simple_create()
  2024-10-14 12:52 ` [PATCH v2 3/4] drm/ttm/tests: Fix memory leak in ttm_tt_simple_create() Jinjie Ruan
@ 2024-10-14 13:38   ` Jeff Johnson
  0 siblings, 0 replies; 12+ messages in thread
From: Jeff Johnson @ 2024-10-14 13:38 UTC (permalink / raw)
  To: Jinjie Ruan, maarten.lankhorst, mripard, tzimmermann, airlied,
	simona, christian.koenig, ray.huang, dmitry.baryshkov,
	dave.stevenson, mcanal, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel

On 10/14/2024 5:52 AM, Jinjie Ruan wrote:
> modprobe ttm_device_test and then rmmod ttm_device_test, the fllowing

nit: s/fllowing/following/

> memory leaks occurs:


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
  2024-10-14 12:52 ` [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic() Jinjie Ruan
@ 2024-10-16  9:35   ` Maxime Ripard
  2024-10-17  1:33     ` Jinjie Ruan
  0 siblings, 1 reply; 12+ messages in thread
From: Maxime Ripard @ 2024-10-16  9:35 UTC (permalink / raw)
  To: Jinjie Ruan
  Cc: maarten.lankhorst, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, quic_jjohnson, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3363 bytes --]

On Mon, Oct 14, 2024 at 08:52:01PM GMT, Jinjie Ruan wrote:
> As Maxime suggested, add a new helper
> drm_kunit_helper_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.
> 
> Suggested-by: Maxime Ripard <mripard@kernel.org>
> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
> ---
>  drivers/gpu/drm/tests/drm_kunit_helpers.c | 40 +++++++++++++++++++++++
>  include/drm/drm_kunit_helpers.h           |  6 ++++
>  2 files changed, 46 insertions(+)
> 
> diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c
> index aa62719dab0e..dc70bafcd394 100644
> --- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
> +++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
> @@ -311,6 +311,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_helper_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_helper_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);
> +
> +	ret = kunit_add_action_or_reset(test,
> +					kunit_action_drm_mode_destroy,
> +					mode);
> +	if (ret)
> +		return NULL;
> +
> +	return mode;
> +}
> +EXPORT_SYMBOL_GPL(drm_kunit_helper_display_mode_from_cea_vic);
> +

I think you can drop the "helper" name there, it's usually reserved for
blanket implementation of DRM hooks. This one isn't a hook, so just
calling it drm_kunit_display_mode_from_cea_vic makes a bit more sense to
me.

>  MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
>  MODULE_DESCRIPTION("KUnit test suite helper functions");
>  MODULE_LICENSE("GPL");
> diff --git a/include/drm/drm_kunit_helpers.h b/include/drm/drm_kunit_helpers.h
> index e7cc17ee4934..1e7fd4be550c 100644
> --- a/include/drm/drm_kunit_helpers.h
> +++ b/include/drm/drm_kunit_helpers.h
> @@ -4,6 +4,7 @@
>  #define DRM_KUNIT_HELPERS_H_
>  
>  #include <drm/drm_drv.h>
> +#include <drm/drm_edid.h>
>
>  #include <linux/device.h>
>  
> @@ -120,4 +121,9 @@ 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_helper_display_mode_from_cea_vic(struct kunit *test,
> +					   struct drm_device *dev,
> +					   u8 video_code);

It's not clear to me what you need the drm_edid header, you just return
a drm_display_mode pointer so you can just forward declare the structure

Once fixed
Acked-by: Maxime Ripard <mripard@kernel.org>

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/4] drm/connector: hdmi: Fix memory leak in drm_display_mode_from_cea_vic()
  2024-10-14 12:52 ` [PATCH v2 2/4] drm/connector: hdmi: Fix memory leak in drm_display_mode_from_cea_vic() Jinjie Ruan
@ 2024-10-16  9:36   ` mripard
  0 siblings, 0 replies; 12+ messages in thread
From: mripard @ 2024-10-16  9:36 UTC (permalink / raw)
  To: Jinjie Ruan
  Cc: maarten.lankhorst, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, quic_jjohnson, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1481 bytes --]

On Mon, Oct 14, 2024 at 08:52:02PM GMT, Jinjie Ruan wrote:
> modprobe drm_connector_test and then rmmod drm_connector_test,
> the following memory leak occurs.
> 
> The `mode` allocated in drm_mode_duplicate() called by
> drm_display_mode_from_cea_vic() is not freed, which cause the memory leak:
> 
> 	unreferenced object 0xffffff80cb0ee400 (size 128):
> 	  comm "kunit_try_catch", pid 1948, jiffies 4294950339
> 	  hex dump (first 32 bytes):
> 	    14 44 02 00 80 07 d8 07 04 08 98 08 00 00 38 04  .D............8.
> 	    3c 04 41 04 65 04 00 00 05 00 00 00 00 00 00 00  <.A.e...........
> 	  backtrace (crc 90e9585c):
> 	    [<00000000ec42e3d7>] kmemleak_alloc+0x34/0x40
> 	    [<00000000d0ef055a>] __kmalloc_cache_noprof+0x26c/0x2f4
> 	    [<00000000c2062161>] drm_mode_duplicate+0x44/0x19c
> 	    [<00000000f96c74aa>] drm_display_mode_from_cea_vic+0x88/0x98
> 	    [<00000000d8f2c8b4>] 0xffffffdc982a4868
> 	    [<000000005d164dbc>] kunit_try_run_case+0x13c/0x3ac
> 	    [<000000006fb23398>] kunit_generic_run_threadfn_adapter+0x80/0xec
> 	    [<000000006ea56ca0>] kthread+0x2e8/0x374
> 	    [<000000000676063f>] ret_from_fork+0x10/0x20
> 	......
> 
> Free `mode` by using drm_kunit_helper_display_mode_from_cea_vic()
> to fix it.
> 
> Cc: stable@vger.kernel.org
> Fixes: abb6f74973e2 ("drm/tests: Add HDMI TDMS character rate tests")
> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>

Acked-by: Maxime Ripard <mripard@kernel.org>

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 4/4] drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic()
  2024-10-14 12:52 ` [PATCH v2 4/4] drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic() Jinjie Ruan
@ 2024-10-16  9:37   ` Maxime Ripard
  0 siblings, 0 replies; 12+ messages in thread
From: Maxime Ripard @ 2024-10-16  9:37 UTC (permalink / raw)
  To: Jinjie Ruan
  Cc: maarten.lankhorst, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, quic_jjohnson, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1465 bytes --]

On Mon, Oct 14, 2024 at 08:52:04PM GMT, Jinjie Ruan wrote:
> modprobe drm_hdmi_state_helper_test and then rmmod it, the following
> memory leak occurs.
> 
> The `mode` allocated in drm_mode_duplicate() called by
> drm_display_mode_from_cea_vic() is not freed, which cause the memory leak:
> 
> 	unreferenced object 0xffffff80ccd18100 (size 128):
> 	  comm "kunit_try_catch", pid 1851, jiffies 4295059695
> 	  hex dump (first 32 bytes):
> 	    57 62 00 00 80 02 90 02 f0 02 20 03 00 00 e0 01  Wb........ .....
> 	    ea 01 ec 01 0d 02 00 00 0a 00 00 00 00 00 00 00  ................
> 	  backtrace (crc c2f1aa95):
> 	    [<000000000f10b11b>] kmemleak_alloc+0x34/0x40
> 	    [<000000001cd4cf73>] __kmalloc_cache_noprof+0x26c/0x2f4
> 	    [<00000000f1f3cffa>] drm_mode_duplicate+0x44/0x19c
> 	    [<000000008cbeef13>] drm_display_mode_from_cea_vic+0x88/0x98
> 	    [<0000000019daaacf>] 0xffffffedc11ae69c
> 	    [<000000000aad0f85>] kunit_try_run_case+0x13c/0x3ac
> 	    [<00000000a9210bac>] kunit_generic_run_threadfn_adapter+0x80/0xec
> 	    [<000000000a0b2e9e>] kthread+0x2e8/0x374
> 	    [<00000000bd668858>] ret_from_fork+0x10/0x20
> 	......
> 
> Free `mode` by using drm_kunit_helper_display_mode_from_cea_vic()
> to fix it.
> 
> Cc: stable@vger.kernel.org
> Fixes: 4af70f19e559 ("drm/tests: Add RGB Quantization tests")
> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>

Acked-by: Maxime Ripard <mripard@kernel.org>

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
  2024-10-16  9:35   ` Maxime Ripard
@ 2024-10-17  1:33     ` Jinjie Ruan
  2024-10-17 12:13       ` Maxime Ripard
  0 siblings, 1 reply; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-17  1:33 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: maarten.lankhorst, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, quic_jjohnson, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel



On 2024/10/16 17:35, Maxime Ripard wrote:
> On Mon, Oct 14, 2024 at 08:52:01PM GMT, Jinjie Ruan wrote:
>> As Maxime suggested, add a new helper
>> drm_kunit_helper_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.
>>
>> Suggested-by: Maxime Ripard <mripard@kernel.org>
>> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
>> ---
>>  drivers/gpu/drm/tests/drm_kunit_helpers.c | 40 +++++++++++++++++++++++
>>  include/drm/drm_kunit_helpers.h           |  6 ++++
>>  2 files changed, 46 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c
>> index aa62719dab0e..dc70bafcd394 100644
>> --- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
>> +++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
>> @@ -311,6 +311,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_helper_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_helper_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);
>> +
>> +	ret = kunit_add_action_or_reset(test,
>> +					kunit_action_drm_mode_destroy,
>> +					mode);
>> +	if (ret)
>> +		return NULL;
>> +
>> +	return mode;
>> +}
>> +EXPORT_SYMBOL_GPL(drm_kunit_helper_display_mode_from_cea_vic);
>> +
> 
> I think you can drop the "helper" name there, it's usually reserved for
> blanket implementation of DRM hooks. This one isn't a hook, so just
> calling it drm_kunit_display_mode_from_cea_vic makes a bit more sense to
> me.
> 
>>  MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
>>  MODULE_DESCRIPTION("KUnit test suite helper functions");
>>  MODULE_LICENSE("GPL");
>> diff --git a/include/drm/drm_kunit_helpers.h b/include/drm/drm_kunit_helpers.h
>> index e7cc17ee4934..1e7fd4be550c 100644
>> --- a/include/drm/drm_kunit_helpers.h
>> +++ b/include/drm/drm_kunit_helpers.h
>> @@ -4,6 +4,7 @@
>>  #define DRM_KUNIT_HELPERS_H_
>>  
>>  #include <drm/drm_drv.h>
>> +#include <drm/drm_edid.h>
>>
>>  #include <linux/device.h>
>>  
>> @@ -120,4 +121,9 @@ 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_helper_display_mode_from_cea_vic(struct kunit *test,
>> +					   struct drm_device *dev,
>> +					   u8 video_code);
> 
> It's not clear to me what you need the drm_edid header, you just return
> a drm_display_mode pointer so you can just forward declare the structure


There is a compile error without the header,because there is no
"drm_display_mode_from_cea_vic()" declare.

drivers/gpu/drm/tests/drm_kunit_helpers.c:341:16: error: implicit
declaration of function ‘drm_display_mode_from_cea_vic’; did you mean
‘drm_kunit_display_mode_from_cea_vic’?
[-Werror=implicit-function-declaration]
  341 |         mode = drm_display_mode_from_cea_vic(dev, video_code);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                drm_kunit_display_mode_from_cea_vic
drivers/gpu/drm/tests/drm_kunit_helpers.c:341:14: warning: assignment to
‘struct drm_display_mode *’ from ‘int’ makes pointer from integer
without a cast [-Wint-conversion]
  341 |         mode = drm_display_mode_from_cea_vic(dev, video_code);
      |              ^


> 
> Once fixed
> Acked-by: Maxime Ripard <mripard@kernel.org>
> 
> Maxime

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
  2024-10-17  1:33     ` Jinjie Ruan
@ 2024-10-17 12:13       ` Maxime Ripard
  2024-10-17 12:16         ` Jinjie Ruan
  0 siblings, 1 reply; 12+ messages in thread
From: Maxime Ripard @ 2024-10-17 12:13 UTC (permalink / raw)
  To: Jinjie Ruan
  Cc: maarten.lankhorst, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, quic_jjohnson, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1903 bytes --]

On Thu, Oct 17, 2024 at 09:33:07AM GMT, Jinjie Ruan wrote:
> >> diff --git a/include/drm/drm_kunit_helpers.h b/include/drm/drm_kunit_helpers.h
> >> index e7cc17ee4934..1e7fd4be550c 100644
> >> --- a/include/drm/drm_kunit_helpers.h
> >> +++ b/include/drm/drm_kunit_helpers.h
> >> @@ -4,6 +4,7 @@
> >>  #define DRM_KUNIT_HELPERS_H_
> >>  
> >>  #include <drm/drm_drv.h>
> >> +#include <drm/drm_edid.h>
> >>
> >>  #include <linux/device.h>
> >>  
> >> @@ -120,4 +121,9 @@ 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_helper_display_mode_from_cea_vic(struct kunit *test,
> >> +					   struct drm_device *dev,
> >> +					   u8 video_code);
> > 
> > It's not clear to me what you need the drm_edid header, you just return
> > a drm_display_mode pointer so you can just forward declare the structure
> 
> 
> There is a compile error without the header,because there is no
> "drm_display_mode_from_cea_vic()" declare.
> 
> drivers/gpu/drm/tests/drm_kunit_helpers.c:341:16: error: implicit
> declaration of function ‘drm_display_mode_from_cea_vic’; did you mean
> ‘drm_kunit_display_mode_from_cea_vic’?
> [-Werror=implicit-function-declaration]
>   341 |         mode = drm_display_mode_from_cea_vic(dev, video_code);
>       |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>       |                drm_kunit_display_mode_from_cea_vic
> drivers/gpu/drm/tests/drm_kunit_helpers.c:341:14: warning: assignment to
> ‘struct drm_display_mode *’ from ‘int’ makes pointer from integer
> without a cast [-Wint-conversion]
>   341 |         mode = drm_display_mode_from_cea_vic(dev, video_code);
>       |              ^

Right, but the error is in the C file, not the header.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()
  2024-10-17 12:13       ` Maxime Ripard
@ 2024-10-17 12:16         ` Jinjie Ruan
  0 siblings, 0 replies; 12+ messages in thread
From: Jinjie Ruan @ 2024-10-17 12:16 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: maarten.lankhorst, tzimmermann, airlied, simona,
	christian.koenig, ray.huang, dmitry.baryshkov, dave.stevenson,
	mcanal, quic_jjohnson, skhan, davidgow, karolina.stolarek,
	Arunpravin.PaneerSelvam, thomas.hellstrom, asomalap, dri-devel,
	linux-kernel



On 2024/10/17 20:13, Maxime Ripard wrote:
> On Thu, Oct 17, 2024 at 09:33:07AM GMT, Jinjie Ruan wrote:
>>>> diff --git a/include/drm/drm_kunit_helpers.h b/include/drm/drm_kunit_helpers.h
>>>> index e7cc17ee4934..1e7fd4be550c 100644
>>>> --- a/include/drm/drm_kunit_helpers.h
>>>> +++ b/include/drm/drm_kunit_helpers.h
>>>> @@ -4,6 +4,7 @@
>>>>  #define DRM_KUNIT_HELPERS_H_
>>>>  
>>>>  #include <drm/drm_drv.h>
>>>> +#include <drm/drm_edid.h>
>>>>
>>>>  #include <linux/device.h>
>>>>  
>>>> @@ -120,4 +121,9 @@ 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_helper_display_mode_from_cea_vic(struct kunit *test,
>>>> +					   struct drm_device *dev,
>>>> +					   u8 video_code);
>>>
>>> It's not clear to me what you need the drm_edid header, you just return
>>> a drm_display_mode pointer so you can just forward declare the structure
>>
>>
>> There is a compile error without the header,because there is no
>> "drm_display_mode_from_cea_vic()" declare.
>>
>> drivers/gpu/drm/tests/drm_kunit_helpers.c:341:16: error: implicit
>> declaration of function ‘drm_display_mode_from_cea_vic’; did you mean
>> ‘drm_kunit_display_mode_from_cea_vic’?
>> [-Werror=implicit-function-declaration]
>>   341 |         mode = drm_display_mode_from_cea_vic(dev, video_code);
>>       |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>       |                drm_kunit_display_mode_from_cea_vic
>> drivers/gpu/drm/tests/drm_kunit_helpers.c:341:14: warning: assignment to
>> ‘struct drm_display_mode *’ from ‘int’ makes pointer from integer
>> without a cast [-Wint-conversion]
>>   341 |         mode = drm_display_mode_from_cea_vic(dev, video_code);
>>       |              ^
> > Right, but the error is in the C file, not the header.

Yes, I have updated it to C file in V3, thank you!

> 
> Maxime

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-10-17 12:16 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-14 12:52 [PATCH v2 0/4] drm: Fix some memory leaks Jinjie Ruan
2024-10-14 12:52 ` [PATCH v2 1/4] drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic() Jinjie Ruan
2024-10-16  9:35   ` Maxime Ripard
2024-10-17  1:33     ` Jinjie Ruan
2024-10-17 12:13       ` Maxime Ripard
2024-10-17 12:16         ` Jinjie Ruan
2024-10-14 12:52 ` [PATCH v2 2/4] drm/connector: hdmi: Fix memory leak in drm_display_mode_from_cea_vic() Jinjie Ruan
2024-10-16  9:36   ` mripard
2024-10-14 12:52 ` [PATCH v2 3/4] drm/ttm/tests: Fix memory leak in ttm_tt_simple_create() Jinjie Ruan
2024-10-14 13:38   ` Jeff Johnson
2024-10-14 12:52 ` [PATCH v2 4/4] drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic() Jinjie Ruan
2024-10-16  9:37   ` Maxime Ripard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®