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.

Signed-off-by: Maxime Ripard <max...@cerno.tech>
---
 drivers/gpu/drm/tests/drm_client_modeset_test.c |  4 +++-
 drivers/gpu/drm/tests/drm_kunit_helpers.c       | 19 ++++++++-----------
 drivers/gpu/drm/tests/drm_kunit_helpers.h       | 11 +++++++++--
 3 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/tests/drm_client_modeset_test.c 
b/drivers/gpu/drm/tests/drm_client_modeset_test.c
index fe95fda350ae..086469273580 100644
--- a/drivers/gpu/drm/tests/drm_client_modeset_test.c
+++ b/drivers/gpu/drm/tests/drm_client_modeset_test.c
@@ -45,7 +45,9 @@ static int drm_client_modeset_test_init(struct kunit *test)
        priv->dev = drm_kunit_helper_alloc_device(test);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->dev);
 
-       priv->drm = drm_kunit_helper_alloc_drm_device(test, priv->dev, 
DRIVER_MODESET);
+       priv->drm = __drm_kunit_helper_alloc_drm_device(test, priv->dev,
+                                                       sizeof(*priv->drm), 0,
+                                                       DRIVER_MODESET);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->drm);
 
        ret = drmm_connector_init(priv->drm, &priv->connector,
diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c 
b/drivers/gpu/drm/tests/drm_kunit_helpers.c
index 8bd7c40d0e1a..6d614f9e62d8 100644
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.c
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c
@@ -13,10 +13,6 @@
 #define WQ_TIMEOUT_MS          100
 #define FAKE_DEVICE_NAME       "drm-kunit-fake-device"
 
-struct kunit_dev {
-       struct drm_device base;
-};
-
 static const struct drm_mode_config_funcs drm_mode_config_funcs = {
 };
 
@@ -104,12 +100,13 @@ 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)
 {
-       struct kunit_dev *kdev;
        struct drm_device *drm;
        struct drm_driver *driver;
+       void *container;
        int ret;
 
        driver = kunit_kzalloc(test, sizeof(*driver), GFP_KERNEL);
@@ -117,11 +114,11 @@ drm_kunit_helper_alloc_drm_device(struct kunit *test, 
struct device *dev,
                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);
diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.h 
b/drivers/gpu/drm/tests/drm_kunit_helpers.h
index b4277fe92c38..70abc8c806c9 100644
--- a/drivers/gpu/drm/tests/drm_kunit_helpers.h
+++ b/drivers/gpu/drm/tests/drm_kunit_helpers.h
@@ -10,7 +10,14 @@ struct device *drm_kunit_helper_alloc_device(struct kunit 
*test);
 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);
+
+#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_

-- 
2.38.1-b4-0.11.0-dev-d416f

Reply via email to