[PATCH 08/10] drm/tests: Add test for drm_framebuffer_free()
Carlos Eduardo Gallo Filho
gcarlos at disroot.org
Fri Aug 25 16:11:48 UTC 2023
Add a single KUnit test case for the drm_framebuffer_free function.
Signed-off-by: Carlos Eduardo Gallo Filho <gcarlos at disroot.org>
---
drivers/gpu/drm/tests/drm_framebuffer_test.c | 49 ++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/drivers/gpu/drm/tests/drm_framebuffer_test.c b/drivers/gpu/drm/tests/drm_framebuffer_test.c
index 50d88bf3fa65..8eca92fdc645 100644
--- a/drivers/gpu/drm/tests/drm_framebuffer_test.c
+++ b/drivers/gpu/drm/tests/drm_framebuffer_test.c
@@ -608,8 +608,57 @@ static void drm_test_framebuffer_init(struct kunit *test)
KUNIT_EXPECT_PTR_EQ(test, dev->mode_config.fb_list.next, &fb1.head);
}
+static void destroy_free_mock(struct drm_framebuffer *fb)
+{
+ struct drm_mock *mock = container_of(fb->dev, typeof(*mock), dev);
+ int *buffer_freed = mock->private;
+ *buffer_freed = 1;
+}
+
+static struct drm_framebuffer_funcs framebuffer_funcs_free_mock = {
+ .destroy = destroy_free_mock,
+};
+
+static void drm_test_framebuffer_free(struct kunit *test)
+{
+ struct drm_mock *mock = test->priv;
+ struct drm_device *dev = &mock->dev;
+ struct drm_mode_object *obj;
+ struct drm_framebuffer fb = {
+ .dev = dev,
+ .funcs = &framebuffer_funcs_free_mock,
+ };
+ int buffer_freed = 0;
+ int id, ret;
+
+ mock->private = &buffer_freed;
+
+ /*
+ * Case where the fb isn't registered. Just test if
+ * drm_framebuffer_free calls fb->funcs->destroy
+ */
+ drm_framebuffer_free(&fb.base.refcount);
+ KUNIT_EXPECT_EQ(test, buffer_freed, 1);
+
+ buffer_freed = 0;
+
+ ret = drm_mode_object_add(dev, &fb.base, DRM_MODE_OBJECT_FB);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+ id = fb.base.id;
+
+ /* Now, test with the fb registered, that must end unregistered */
+ drm_framebuffer_free(&fb.base.refcount);
+ KUNIT_EXPECT_EQ(test, fb.base.id, 0);
+ KUNIT_EXPECT_EQ(test, buffer_freed, 1);
+
+ /* Test if the old id of the fb was really removed from the idr pool */
+ obj = drm_mode_object_find(dev, NULL, id, DRM_MODE_OBJECT_FB);
+ KUNIT_EXPECT_PTR_EQ(test, obj, NULL);
+}
+
static struct kunit_case drm_framebuffer_tests[] = {
KUNIT_CASE(drm_test_framebuffer_cleanup),
+ KUNIT_CASE(drm_test_framebuffer_free),
KUNIT_CASE(drm_test_framebuffer_init),
KUNIT_CASE(drm_test_framebuffer_lookup),
KUNIT_CASE(drm_test_framebuffer_modifiers_not_supported),
--
2.41.0
More information about the dri-devel
mailing list