Hi Maxime,

On 28/01/26 09:43, Maxime Ripard wrote:
The vc4 driver relies on a drm_private_obj, that is initialized by
allocating and initializing a state, and then passing it to
drm_private_obj_init.

Since we're gradually moving away from that pattern to the more
established one relying on a atomic_create_state implementation, let's
migrate this instance to the new pattern.

Signed-off-by: Maxime Ripard <[email protected]>

---

Cc: Dave Stevenson <[email protected]>
Cc: "Maíra Canal" <[email protected]>
Cc: [email protected]
---
  drivers/gpu/drm/vc4/vc4_kms.c | 69 ++++++++++++++++++++++++++++++-------------
  1 file changed, 48 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index 
e563c12109371619605d8e3f78b0f92694dbe5a5..f82c7ea1d74eeaa075296533a1ffe3561f197748
 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -83,11 +83,26 @@ static void vc4_ctm_destroy_state(struct drm_private_obj 
*obj,
        struct vc4_ctm_state *ctm_state = to_vc4_ctm_state(state);
kfree(ctm_state);
  }
+static struct drm_private_state *
+vc4_ctm_create_state(struct drm_private_obj *obj)
+{
+       struct vc4_ctm_state *ctm_state;
+
+       ctm_state = kzalloc(sizeof(*ctm_state), GFP_KERNEL);
+       if (!ctm_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &ctm_state->base);
+
+       return &ctm_state->base;
+}
+
  static const struct drm_private_state_funcs vc4_ctm_state_funcs = {
+       .atomic_create_state = vc4_ctm_create_state,
        .atomic_duplicate_state = vc4_ctm_duplicate_state,
        .atomic_destroy_state = vc4_ctm_destroy_state,
  };
static void vc4_ctm_obj_fini(struct drm_device *dev, void *unused)
@@ -97,19 +112,13 @@ static void vc4_ctm_obj_fini(struct drm_device *dev, void 
*unused)
        drm_atomic_private_obj_fini(&vc4->ctm_manager);
  }
static int vc4_ctm_obj_init(struct vc4_dev *vc4)
  {
-       struct vc4_ctm_state *ctm_state;
-
        drm_modeset_lock_init(&vc4->ctm_state_lock);
- ctm_state = kzalloc(sizeof(*ctm_state), GFP_KERNEL);
-       if (!ctm_state)
-               return -ENOMEM;
-
-       drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, 
&ctm_state->base,
+       drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, NULL,
                                    &vc4_ctm_state_funcs);
return drmm_add_action_or_reset(&vc4->base, vc4_ctm_obj_fini, NULL);
  }
@@ -716,13 +725,28 @@ static void vc4_load_tracker_destroy_state(struct drm_private_obj *obj, load_state = to_vc4_load_tracker_state(state);
        kfree(load_state);
  }
+static struct drm_private_state *
+vc4_load_tracker_create_state(struct drm_private_obj *obj)
+{
+       struct vc4_load_tracker_state *load_state;
+
+       load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
+       if (!load_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &load_state->base);
+
+       return &load_state->base;
+}
+
  static const struct drm_private_state_funcs vc4_load_tracker_state_funcs = {
        .atomic_duplicate_state = vc4_load_tracker_duplicate_state,
        .atomic_destroy_state = vc4_load_tracker_destroy_state,
+       .atomic_create_state = vc4_load_tracker_create_state,

Minor nit: just to keep things consistent, could you move this hook to
the first line?

Even without that,

Reviewed-by: Maíra Canal <[email protected]>

Best regards,
- Maíra

  };


Reply via email to