drm_atomic_get_plane_state() allocates a new plane state by
duplicating the current one and inserts it into the atomic commit as
a single operation.

However, a later change will need to insert a plane state into a
commit without going through the full allocation and duplication path
in drm_atomic_get_plane_state().

Extract the state insertion logic into a new static
drm_atomic_commit_set_plane_state() helper, and convert
drm_atomic_get_plane_state() to use it.

Reviewed-by: Thomas Zimmermann <[email protected]>
Reviewed-by: Daniel Stone <[email protected]>
Signed-off-by: Maxime Ripard <[email protected]>
---
 drivers/gpu/drm/drm_atomic.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 178eca95d0e3..b26458ee98d8 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -631,4 +631,19 @@ static int drm_atomic_connector_check(struct drm_connector 
*connector,
 }
 
+static void drm_atomic_commit_set_plane_state(struct drm_atomic_commit *commit,
+                                             struct drm_plane *plane,
+                                             struct drm_plane_state 
*plane_state)
+{
+       int index = drm_plane_index(plane);
+
+       drm_modeset_lock_assert_held(&plane->mutex);
+
+       commit->planes[index].state_to_destroy = plane_state;
+       commit->planes[index].old_state = plane->state;
+       commit->planes[index].new_state = plane_state;
+       commit->planes[index].ptr = plane;
+       plane_state->state = commit;
+}
+
 /**
  * drm_atomic_get_plane_state - get plane state
@@ -649,5 +664,5 @@ drm_atomic_get_plane_state(struct drm_atomic_commit *state,
                          struct drm_plane *plane)
 {
-       int ret, index = drm_plane_index(plane);
+       int ret;
        struct drm_plane_state *plane_state;
 
@@ -672,9 +687,5 @@ drm_atomic_get_plane_state(struct drm_atomic_commit *state,
                return ERR_PTR(-ENOMEM);
 
-       state->planes[index].state_to_destroy = plane_state;
-       state->planes[index].ptr = plane;
-       state->planes[index].old_state = plane->state;
-       state->planes[index].new_state = plane_state;
-       plane_state->state = state;
+       drm_atomic_commit_set_plane_state(state, plane, plane_state);
 
        drm_dbg_atomic(plane->dev, "Added [PLANE:%d:%s] %p state to %p\n",

-- 
2.55.0

Reply via email to