Skip to content

Commit

Permalink
drm/tests: managed: Extract device initialization into test init
Browse files Browse the repository at this point in the history
It simplifies the process of extending the test suite with additional
test cases without unnecessary duplication.

Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240115171351.504264-5-michal.winiarski@intel.com
  • Loading branch information
Michał Winiarski authored and Maxime Ripard committed Jan 17, 2024
1 parent a1c73a3 commit 8ec16a7
Showing 1 changed file with 26 additions and 15 deletions.
41 changes: 26 additions & 15 deletions drivers/gpu/drm/tests/drm_managed_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand All @@ -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);
Expand All @@ -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[] = {
Expand All @@ -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
};

Expand Down

0 comments on commit 8ec16a7

Please sign in to comment.