@@ -3140,6 +3140,7 @@ drm_atomic_helper_duplicate_state(struct drm_device *dev,
31403140 struct drm_atomic_state * state ;
31413141 struct drm_connector * conn ;
31423142 struct drm_connector_list_iter conn_iter ;
3143+ struct drm_private_obj * priv_obj ;
31433144 struct drm_plane * plane ;
31443145 struct drm_crtc * crtc ;
31453146 int err = 0 ;
@@ -3184,6 +3185,16 @@ drm_atomic_helper_duplicate_state(struct drm_device *dev,
31843185 }
31853186 drm_connector_list_iter_end (& conn_iter );
31863187
3188+ drm_for_each_privobj (priv_obj , dev ) {
3189+ struct drm_private_state * priv_state ;
3190+
3191+ priv_state = drm_atomic_get_private_obj_state (state , priv_obj );
3192+ if (IS_ERR (priv_state )) {
3193+ err = PTR_ERR (priv_state );
3194+ goto free ;
3195+ }
3196+ }
3197+
31873198 /* clear the acquire context so that it isn't accidentally reused */
31883199 state -> acquire_ctx = NULL ;
31893200
@@ -3278,6 +3289,8 @@ int drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state,
32783289 struct drm_connector_state * new_conn_state ;
32793290 struct drm_crtc * crtc ;
32803291 struct drm_crtc_state * new_crtc_state ;
3292+ struct drm_private_state * new_priv_state ;
3293+ struct drm_private_obj * priv_obj ;
32813294
32823295 state -> acquire_ctx = ctx ;
32833296
@@ -3290,6 +3303,9 @@ int drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state,
32903303 for_each_new_connector_in_state (state , connector , new_conn_state , i )
32913304 state -> connectors [i ].old_state = connector -> state ;
32923305
3306+ for_each_new_private_obj_in_state (state , priv_obj , new_priv_state , i )
3307+ state -> private_objs [i ].old_state = priv_obj -> state ;
3308+
32933309 ret = drm_atomic_commit (state );
32943310
32953311 state -> acquire_ctx = NULL ;
0 commit comments