Unverified Commit 13c1d5f3 authored by Maxime Ripard's avatar Maxime Ripard
Browse files

drm/tests: helpers: Create kunit helper to destroy a drm_display_mode



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.

Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Link: https://lore.kernel.org/r/20250408-drm-kunit-drm-display-mode-memleak-v1-1-996305a2e75a@kernel.org


Signed-off-by: default avatarMaxime Ripard <mripard@kernel.org>
parent 1260ed77
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -278,6 +278,28 @@ static void kunit_action_drm_mode_destroy(void *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
+3 −0
Original line number Diff line number Diff line
@@ -118,6 +118,9 @@ drm_kunit_helper_create_crtc(struct kunit *test,
			     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);