From: Carlos Eduardo Gallo Filho <gcarlos@disroot.org>
To: dri-devel@lists.freedesktop.org
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Maíra Canal" <mairacanal@riseup.net>,
"André Almeida" <andrealmeid@igalia.com>,
"Arthur Grillo" <arthurgrillo@riseup.net>,
"Tales Lelo da Aparecida" <tales.aparecida@gmail.com>,
"Carlos Eduardo Gallo Filho" <gcarlos@disroot.org>
Subject: [PATCH v3 1/9] drm/tests: Stop using deprecated dev_private member on drm_framebuffer tests
Date: Wed, 3 Jul 2024 14:22:20 -0300 [thread overview]
Message-ID: <20240703172228.11166-2-gcarlos@disroot.org> (raw)
In-Reply-To: <20240703172228.11166-1-gcarlos@disroot.org>
The dev_private member of drm_device is deprecated and its use should
be avoided. Stop using it by embedding the drm_device onto a mock struct.
The new mock struct allows to share variables and even further mocks
over the tests in a cleaner way than using dev_private void pointer.
Also start using drm_kunit_helper_alloc_drm_device() for allocating
the drm_device mock.
Signed-off-by: Carlos Eduardo Gallo Filho <gcarlos@disroot.org>
---
v2:
- Start using drm_kunit_helper_alloc_drm_device() for drm_device mock.
- Rename struct drm_mock to drm_framebuffer_test_priv
v3:
- Replace the use of void pointer on drm_framebuffer_test_priv struct.
- Document struct drm_framebuffer_test_priv here.
---
drivers/gpu/drm/tests/drm_framebuffer_test.c | 54 ++++++++++++++------
1 file changed, 38 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/tests/drm_framebuffer_test.c b/drivers/gpu/drm/tests/drm_framebuffer_test.c
index 06f03b78c9c4..3882a88b6631 100644
--- a/drivers/gpu/drm/tests/drm_framebuffer_test.c
+++ b/drivers/gpu/drm/tests/drm_framebuffer_test.c
@@ -8,8 +8,10 @@
#include <kunit/test.h>
#include <drm/drm_device.h>
+#include <drm/drm_drv.h>
#include <drm/drm_mode.h>
#include <drm/drm_fourcc.h>
+#include <drm/drm_kunit_helpers.h>
#include <drm/drm_print.h>
#include "../drm_crtc_internal.h"
@@ -317,12 +319,25 @@ static const struct drm_framebuffer_test drm_framebuffer_create_cases[] = {
},
};
+/*
+ * This struct is intended to provide a way to mocked functions communicate
+ * with the outer test when it can't be achieved by using its return value. In
+ * this way, the functions that receive the mocked drm_device, for example, can
+ * grab a reference to this and actually return something to be used on some
+ * expectation.
+ */
+struct drm_framebuffer_test_priv {
+ struct drm_device dev;
+ bool buffer_created;
+};
+
static struct drm_framebuffer *fb_create_mock(struct drm_device *dev,
struct drm_file *file_priv,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
- int *buffer_created = dev->dev_private;
- *buffer_created = 1;
+ struct drm_framebuffer_test_priv *priv = container_of(dev, typeof(*priv), dev);
+
+ priv->buffer_created = true;
return ERR_PTR(-EINVAL);
}
@@ -332,30 +347,37 @@ static struct drm_mode_config_funcs mock_config_funcs = {
static int drm_framebuffer_test_init(struct kunit *test)
{
- struct drm_device *mock;
+ struct device *parent;
+ struct drm_framebuffer_test_priv *priv;
+ struct drm_device *dev;
+
+ parent = drm_kunit_helper_alloc_device(test);
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
- mock = kunit_kzalloc(test, sizeof(*mock), GFP_KERNEL);
- KUNIT_ASSERT_NOT_ERR_OR_NULL(test, mock);
+ priv = drm_kunit_helper_alloc_drm_device(test, parent, typeof(*priv),
+ dev, 0);
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv);
+ dev = &priv->dev;
- mock->mode_config.min_width = MIN_WIDTH;
- mock->mode_config.max_width = MAX_WIDTH;
- mock->mode_config.min_height = MIN_HEIGHT;
- mock->mode_config.max_height = MAX_HEIGHT;
- mock->mode_config.funcs = &mock_config_funcs;
+ dev->mode_config.min_width = MIN_WIDTH;
+ dev->mode_config.max_width = MAX_WIDTH;
+ dev->mode_config.min_height = MIN_HEIGHT;
+ dev->mode_config.max_height = MAX_HEIGHT;
+ dev->mode_config.funcs = &mock_config_funcs;
- test->priv = mock;
+ test->priv = priv;
return 0;
}
static void drm_test_framebuffer_create(struct kunit *test)
{
const struct drm_framebuffer_test *params = test->param_value;
- struct drm_device *mock = test->priv;
- int buffer_created = 0;
+ struct drm_framebuffer_test_priv *priv = test->priv;
+ struct drm_device *dev = &priv->dev;
- mock->dev_private = &buffer_created;
- drm_internal_framebuffer_create(mock, ¶ms->cmd, NULL);
- KUNIT_EXPECT_EQ(test, params->buffer_created, buffer_created);
+ priv->buffer_created = false;
+ drm_internal_framebuffer_create(dev, ¶ms->cmd, NULL);
+ KUNIT_EXPECT_EQ(test, params->buffer_created, priv->buffer_created);
}
static void drm_framebuffer_test_to_desc(const struct drm_framebuffer_test *t, char *desc)
--
2.44.2
next prev parent reply other threads:[~2024-07-03 17:30 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-03 17:22 [PATCH v3 0/9] Increase coverage on drm_framebuffer.c Carlos Eduardo Gallo Filho
2024-07-03 17:22 ` Carlos Eduardo Gallo Filho [this message]
2024-07-08 11:24 ` [PATCH v3 1/9] drm/tests: Stop using deprecated dev_private member on drm_framebuffer tests Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 2/9] drm/tests: Add parameters to the drm_test_framebuffer_create test Carlos Eduardo Gallo Filho
2024-07-08 11:25 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 3/9] drm/tests: Replace strcpy to strscpy on " Carlos Eduardo Gallo Filho
2024-07-08 11:25 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 4/9] drm/tests: Add test case for drm_internal_framebuffer_create() Carlos Eduardo Gallo Filho
2024-07-08 11:28 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 5/9] drm/tests: Add test for drm_framebuffer_check_src_coords() Carlos Eduardo Gallo Filho
2024-07-08 11:28 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 6/9] drm/tests: Add test for drm_framebuffer_cleanup() Carlos Eduardo Gallo Filho
2024-07-08 11:29 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 7/9] drm/tests: Add test for drm_framebuffer_lookup() Carlos Eduardo Gallo Filho
2024-07-08 11:29 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 8/9] drm/tests: Add test for drm_framebuffer_init() Carlos Eduardo Gallo Filho
2024-07-05 5:37 ` kernel test robot
2024-07-08 11:35 ` Maxime Ripard
2024-07-03 17:22 ` [PATCH v3 9/9] drm/tests: Add test for drm_framebuffer_free() Carlos Eduardo Gallo Filho
2024-07-05 11:06 ` kernel test robot
2024-07-08 11:36 ` Maxime Ripard
2024-07-08 16:41 ` Carlos
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240703172228.11166-2-gcarlos@disroot.org \
--to=gcarlos@disroot.org \
--cc=airlied@gmail.com \
--cc=andrealmeid@igalia.com \
--cc=arthurgrillo@riseup.net \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mairacanal@riseup.net \
--cc=mripard@kernel.org \
--cc=tales.aparecida@gmail.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox