Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be9174a4 authored by Daniel Vetter's avatar Daniel Vetter
Browse files

drm/atomic-helper: use for_each_*_in_state more



This avois leaking drm_atomic_state internals into the helpers. The
only place where this still happens after this patch is drm_atomic_helper_swap_state().
It's unavoidable there, and maybe a good indicator we should actually
move that function into drm_atomic.c.

Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1464818821-5736-2-git-send-email-daniel.vetter@ffwll.ch
parent 5f0c3f99
Loading
Loading
Loading
Loading
+16 −31
Original line number Original line Diff line number Diff line
@@ -616,7 +616,7 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
		if (!funcs || !funcs->atomic_check)
		if (!funcs || !funcs->atomic_check)
			continue;
			continue;


		ret = funcs->atomic_check(crtc, state->crtc_states[i]);
		ret = funcs->atomic_check(crtc, crtc_state);
		if (ret) {
		if (ret) {
			DRM_DEBUG_ATOMIC("[CRTC:%d:%s] atomic driver check failed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d:%s] atomic driver check failed\n",
					 crtc->base.id, crtc->name);
					 crtc->base.id, crtc->name);
@@ -1254,16 +1254,12 @@ EXPORT_SYMBOL(drm_atomic_helper_commit);
int drm_atomic_helper_prepare_planes(struct drm_device *dev,
int drm_atomic_helper_prepare_planes(struct drm_device *dev,
				     struct drm_atomic_state *state)
				     struct drm_atomic_state *state)
{
{
	int nplanes = dev->mode_config.num_total_plane;
	struct drm_plane *plane;
	int ret, i;
	struct drm_plane_state *plane_state;
	int ret, i, j;


	for (i = 0; i < nplanes; i++) {
	for_each_plane_in_state(state, plane, plane_state, i) {
		const struct drm_plane_helper_funcs *funcs;
		const struct drm_plane_helper_funcs *funcs;
		struct drm_plane *plane = state->planes[i];
		struct drm_plane_state *plane_state = state->plane_states[i];

		if (!plane)
			continue;


		funcs = plane->helper_private;
		funcs = plane->helper_private;


@@ -1277,12 +1273,10 @@ int drm_atomic_helper_prepare_planes(struct drm_device *dev,
	return 0;
	return 0;


fail:
fail:
	for (i--; i >= 0; i--) {
	for_each_plane_in_state(state, plane, plane_state, j) {
		const struct drm_plane_helper_funcs *funcs;
		const struct drm_plane_helper_funcs *funcs;
		struct drm_plane *plane = state->planes[i];
		struct drm_plane_state *plane_state = state->plane_states[i];


		if (!plane)
		if (j >= i)
			continue;
			continue;


		funcs = plane->helper_private;
		funcs = plane->helper_private;
@@ -1569,35 +1563,26 @@ void drm_atomic_helper_swap_state(struct drm_device *dev,
				  struct drm_atomic_state *state)
				  struct drm_atomic_state *state)
{
{
	int i;
	int i;
	struct drm_connector *connector;
	struct drm_connector_state *conn_state;
	struct drm_crtc *crtc;
	struct drm_crtc_state *crtc_state;
	struct drm_plane *plane;
	struct drm_plane_state *plane_state;


	for (i = 0; i < state->num_connector; i++) {
	for_each_connector_in_state(state, connector, conn_state, i) {
		struct drm_connector *connector = state->connectors[i];

		if (!connector)
			continue;

		connector->state->state = state;
		connector->state->state = state;
		swap(state->connector_states[i], connector->state);
		swap(state->connector_states[i], connector->state);
		connector->state->state = NULL;
		connector->state->state = NULL;
	}
	}


	for (i = 0; i < dev->mode_config.num_crtc; i++) {
	for_each_crtc_in_state(state, crtc, crtc_state, i) {
		struct drm_crtc *crtc = state->crtcs[i];

		if (!crtc)
			continue;

		crtc->state->state = state;
		crtc->state->state = state;
		swap(state->crtc_states[i], crtc->state);
		swap(state->crtc_states[i], crtc->state);
		crtc->state->state = NULL;
		crtc->state->state = NULL;
	}
	}


	for (i = 0; i < dev->mode_config.num_total_plane; i++) {
	for_each_plane_in_state(state, plane, plane_state, i) {
		struct drm_plane *plane = state->planes[i];

		if (!plane)
			continue;

		plane->state->state = state;
		plane->state->state = state;
		swap(state->plane_states[i], plane->state);
		swap(state->plane_states[i], plane->state);
		plane->state->state = NULL;
		plane->state->state = NULL;