Unverified Commit 8ec16a7a authored by Michał Winiarski's avatar Michał Winiarski Committed by Maxime Ripard
Browse files

drm/tests: managed: Extract device initialization into test init



It simplifies the process of extending the test suite with additional
test cases without unnecessary duplication.

Signed-off-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
Acked-by: default avatarMaxime Ripard <mripard@kernel.org>
Signed-off-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240115171351.504264-5-michal.winiarski@intel.com
parent a1c73a3b
Loading
Loading
Loading
Loading
+26 −15
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#define TEST_TIMEOUT_MS	100

struct managed_test_priv {
	struct drm_device *drm;
	bool action_done;
	wait_queue_head_t action_wq;
};
@@ -29,11 +30,28 @@ static void drm_action(struct drm_device *drm, void *ptr)
 * device is released.
 */
static void drm_test_managed_run_action(struct kunit *test)
{
	struct managed_test_priv *priv = test->priv;
	int ret;

	ret = drmm_add_action_or_reset(priv->drm, drm_action, priv);
	KUNIT_EXPECT_EQ(test, ret, 0);

	ret = drm_dev_register(priv->drm, 0);
	KUNIT_ASSERT_EQ(test, ret, 0);

	drm_dev_unregister(priv->drm);
	drm_kunit_helper_free_device(test, priv->drm->dev);

	ret = wait_event_interruptible_timeout(priv->action_wq, priv->action_done,
					       msecs_to_jiffies(TEST_TIMEOUT_MS));
	KUNIT_EXPECT_GT(test, ret, 0);
}

static int drm_managed_test_init(struct kunit *test)
{
	struct managed_test_priv *priv;
	struct drm_device *drm;
	struct device *dev;
	int ret;

	priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv);
@@ -47,21 +65,13 @@ static void drm_test_managed_run_action(struct kunit *test)
	 * to remain allocated beyond both parent device and drm_device
	 * lifetime.
	 */
	drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, DRIVER_MODESET);
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
	priv->drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*priv->drm), 0,
							DRIVER_MODESET);
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->drm);

	ret = drmm_add_action_or_reset(drm, drm_action, priv);
	KUNIT_EXPECT_EQ(test, ret, 0);
	test->priv = priv;

	ret = drm_dev_register(drm, 0);
	KUNIT_ASSERT_EQ(test, ret, 0);

	drm_dev_unregister(drm);
	drm_kunit_helper_free_device(test, dev);

	ret = wait_event_interruptible_timeout(priv->action_wq, priv->action_done,
					       msecs_to_jiffies(TEST_TIMEOUT_MS));
	KUNIT_EXPECT_GT(test, ret, 0);
	return 0;
}

static struct kunit_case drm_managed_tests[] = {
@@ -71,6 +81,7 @@ static struct kunit_case drm_managed_tests[] = {

static struct kunit_suite drm_managed_test_suite = {
	.name = "drm_managed",
	.init = drm_managed_test_init,
	.test_cases = drm_managed_tests
};