openwrt/target/linux/bcm27xx/patches-6.1/950-0496-drm-tests-helpers-Allow-for-a-custom-device-struct-t.patch

136 lines
4.6 KiB
Diff
Raw Normal View History

From 6f034f1e2e19a86ea85355efdf6dc55fa8a04e59 Mon Sep 17 00:00:00 2001
From: Maxime Ripard <maxime@cerno.tech>
Date: Mon, 21 Nov 2022 14:28:44 +0100
Subject: [PATCH] drm/tests: helpers: Allow for a custom device struct
to be allocated
The current helper to allocate a DRM device doesn't allow for any
subclassing by drivers, which is going to be troublesome as we work on
getting some kunit testing on atomic modesetting code.
Let's use a similar pattern to the other allocation helpers by providing
the structure size and offset as arguments.
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
drivers/gpu/drm/tests/drm_kunit_helpers.c | 40 +++++------------------
include/drm/drm_kunit_helpers.h | 32 ++++++++++++++++--
2 files changed, 39 insertions(+), 33 deletions(-)
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
@@ -11,10 +11,6 @@
#define KUNIT_DEVICE_NAME "drm-kunit-mock-device"
-struct kunit_dev {
- struct drm_device base;
-};
-
static const struct drm_mode_config_funcs drm_mode_config_funcs = {
};
@@ -85,32 +81,14 @@ void drm_kunit_helper_free_device(struct
}
EXPORT_SYMBOL_GPL(drm_kunit_helper_free_device);
-/**
- * drm_kunit_helper_alloc_drm_device - Allocates a mock DRM device for KUnit tests
- * @test: The test context object
- * @dev: The parent device object
- * @features: Mocked DRM device driver features
- *
- * This function creates a struct &drm_driver and will create a struct
- * &drm_device from @dev and that driver.
- *
- * @dev should be allocated using drm_kunit_helper_alloc_device().
- *
- * The driver is tied to the @test context and will get cleaned at the
- * end of the test. The drm_device is allocated through
- * devm_drm_dev_alloc() and will thus be freed through a device-managed
- * resource.
- *
- * Returns:
- * A pointer to the new drm_device, or an ERR_PTR() otherwise.
- */
struct drm_device *
-drm_kunit_helper_alloc_drm_device(struct kunit *test, struct device *dev,
- u32 features)
+__drm_kunit_helper_alloc_drm_device(struct kunit *test, struct device *dev,
+ size_t size, size_t offset,
+ u32 features)
{
- struct kunit_dev *kdev;
struct drm_device *drm;
struct drm_driver *driver;
+ void *container;
int ret;
driver = kunit_kzalloc(test, sizeof(*driver), GFP_KERNEL);
@@ -118,11 +96,11 @@ drm_kunit_helper_alloc_drm_device(struct
return ERR_PTR(-ENOMEM);
driver->driver_features = features;
- kdev = devm_drm_dev_alloc(dev, driver, struct kunit_dev, base);
- if (IS_ERR(kdev))
- return ERR_CAST(kdev);
+ container = __devm_drm_dev_alloc(dev, driver, size, offset);
+ if (IS_ERR(container))
+ return ERR_CAST(container);
- drm = &kdev->base;
+ drm = container + offset;
drm->mode_config.funcs = &drm_mode_config_funcs;
ret = drmm_mode_config_init(drm);
@@ -131,7 +109,7 @@ drm_kunit_helper_alloc_drm_device(struct
return drm;
}
-EXPORT_SYMBOL_GPL(drm_kunit_helper_alloc_drm_device);
+EXPORT_SYMBOL_GPL(__drm_kunit_helper_alloc_drm_device);
MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
MODULE_LICENSE("GPL");
--- a/include/drm/drm_kunit_helpers.h
+++ b/include/drm/drm_kunit_helpers.h
@@ -10,7 +10,35 @@ struct device *drm_kunit_helper_alloc_de
void drm_kunit_helper_free_device(struct kunit *test, struct device *dev);
struct drm_device *
-drm_kunit_helper_alloc_drm_device(struct kunit *test, struct device *dev,
- u32 features);
+__drm_kunit_helper_alloc_drm_device(struct kunit *test, struct device *dev,
+ size_t size, size_t offset,
+ u32 features);
+
+/**
+ * drm_kunit_helper_alloc_drm_device - Allocates a mock DRM device for KUnit tests
+ * @_test: The test context object
+ * @_dev: The parent device object
+ * @_type: the type of the struct which contains struct &drm_device
+ * @_member: the name of the &drm_device within @_type.
+ * @_features: Mocked DRM device driver features
+ *
+ * This function creates a struct &drm_driver and will create a struct
+ * &drm_device from @_dev and that driver.
+ *
+ * @_dev should be allocated using drm_kunit_helper_alloc_device().
+ *
+ * The driver is tied to the @_test context and will get cleaned at the
+ * end of the test. The drm_device is allocated through
+ * devm_drm_dev_alloc() and will thus be freed through a device-managed
+ * resource.
+ *
+ * Returns:
+ * A pointer to the new drm_device, or an ERR_PTR() otherwise.
+ */
+#define drm_kunit_helper_alloc_drm_device(_test, _dev, _type, _member, _feat) \
+ ((_type *)__drm_kunit_helper_alloc_drm_device(_test, _dev, \
+ sizeof(_type), \
+ offsetof(_type, _member), \
+ _feat))
#endif // DRM_KUNIT_HELPERS_H_