]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/vc4: Switch private_obj initialization to atomic_create_state
authorMaxime Ripard <mripard@kernel.org>
Wed, 28 Jan 2026 12:43:58 +0000 (13:43 +0100)
committerMaxime Ripard <mripard@kernel.org>
Tue, 10 Feb 2026 09:07:57 +0000 (10:07 +0100)
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.

Reviewed-by: MaĆ­ra Canal <mcanal@igalia.com>
Link: https://patch.msgid.link/20260128-drm-private-obj-reset-v4-14-90891fa3d3b0@redhat.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
drivers/gpu/drm/vc4/vc4_kms.c

index e563c12109371619605d8e3f78b0f92694dbe5a5..e94e2d344e0fbaefa12dabd3e1b94bb2ab0103d4 100644 (file)
@@ -85,7 +85,22 @@ static void vc4_ctm_destroy_state(struct drm_private_obj *obj,
        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,
 };
@@ -99,15 +114,9 @@ static void vc4_ctm_obj_fini(struct drm_device *dev, void *unused)
 
 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);
@@ -718,7 +727,22 @@ static void vc4_load_tracker_destroy_state(struct drm_private_obj *obj,
        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_create_state = vc4_load_tracker_create_state,
        .atomic_duplicate_state = vc4_load_tracker_duplicate_state,
        .atomic_destroy_state = vc4_load_tracker_destroy_state,
 };
@@ -732,14 +756,8 @@ static void vc4_load_tracker_obj_fini(struct drm_device *dev, void *unused)
 
 static int vc4_load_tracker_obj_init(struct vc4_dev *vc4)
 {
-       struct vc4_load_tracker_state *load_state;
-
-       load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
-       if (!load_state)
-               return -ENOMEM;
-
        drm_atomic_private_obj_init(&vc4->base, &vc4->load_tracker,
-                                   &load_state->base,
+                                   NULL,
                                    &vc4_load_tracker_state_funcs);
 
        return drmm_add_action_or_reset(&vc4->base, vc4_load_tracker_obj_fini, NULL);
@@ -800,7 +818,22 @@ static void vc4_hvs_channels_print_state(struct drm_printer *p,
        }
 }
 
+static struct drm_private_state *
+vc4_hvs_channels_create_state(struct drm_private_obj *obj)
+{
+       struct vc4_hvs_state *hvs_state;
+
+       hvs_state = kzalloc(sizeof(*hvs_state), GFP_KERNEL);
+       if (!hvs_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &hvs_state->base);
+
+       return &hvs_state->base;
+}
+
 static const struct drm_private_state_funcs vc4_hvs_state_funcs = {
+       .atomic_create_state = vc4_hvs_channels_create_state,
        .atomic_duplicate_state = vc4_hvs_channels_duplicate_state,
        .atomic_destroy_state = vc4_hvs_channels_destroy_state,
        .atomic_print_state = vc4_hvs_channels_print_state,
@@ -815,14 +848,8 @@ static void vc4_hvs_channels_obj_fini(struct drm_device *dev, void *unused)
 
 static int vc4_hvs_channels_obj_init(struct vc4_dev *vc4)
 {
-       struct vc4_hvs_state *state;
-
-       state = kzalloc(sizeof(*state), GFP_KERNEL);
-       if (!state)
-               return -ENOMEM;
-
        drm_atomic_private_obj_init(&vc4->base, &vc4->hvs_channels,
-                                   &state->base,
+                                   NULL,
                                    &vc4_hvs_state_funcs);
 
        return drmm_add_action_or_reset(&vc4->base, vc4_hvs_channels_obj_fini, NULL);