diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 45df6376f408..5c0f7b7024d1 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -343,9 +343,9 @@ void drm_atomic_commit_default_clear(struct drm_atomic_commit *state) continue; drm_colorop_atomic_destroy_state(colorop, - state->colorops[i].state); + state->colorops[i].state_to_destroy); state->colorops[i].ptr = NULL; - state->colorops[i].state = NULL; + state->colorops[i].state_to_destroy = NULL; state->colorops[i].old_state = NULL; state->colorops[i].new_state = NULL; } @@ -708,7 +708,7 @@ drm_atomic_get_colorop_state(struct drm_atomic_commit *state, if (!colorop_state) return ERR_PTR(-ENOMEM); - state->colorops[index].state = colorop_state; + state->colorops[index].state_to_destroy = colorop_state; state->colorops[index].ptr = colorop; state->colorops[index].old_state = colorop->state; state->colorops[index].new_state = colorop_state; diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 285aac3554df..c4752bd7d999 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -3351,7 +3351,7 @@ int drm_atomic_helper_swap_state(struct drm_atomic_commit *state, old_colorop_state->state = state; new_colorop_state->state = NULL; - state->colorops[i].state = old_colorop_state; + state->colorops[i].state_to_destroy = old_colorop_state; colorop->state = new_colorop_state; } diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 88087910ab1a..00b3e9fc429a 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -159,7 +159,23 @@ struct drm_crtc_commit { struct __drm_colorops_state { struct drm_colorop *ptr; - struct drm_colorop_state *state, *old_state, *new_state; + + /** + * @state_to_destroy: + * + * Used to track the @drm_colorop_state we will need to free + * when tearing down the associated &drm_atomic_commit in + * $drm_mode_config_funcs.atomic_state_clear or + * drm_atomic_commit_default_clear(). + * + * Before a commit, and the call to + * drm_atomic_helper_swap_state() in particular, it points to + * the same state than @new_state. After a commit, it points to + * the same state than @old_state. + */ + struct drm_colorop_state *state_to_destroy; + + struct drm_colorop_state *old_state, *new_state; }; struct __drm_planes_state {