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

Commit 084ffbd7 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Liviu Dudau
Browse files

drm: arm: malidp: Don't destroy planes manually in error handlers



The top-level error handler calls drm_mode_config_cleanup() which will
destroy all planes. There's no need to destroy them manually in lower
error handlers.

As plane cleanup is now handled entirely by drm_mode_config_cleanup(),
we must ensure that the plane .destroy() handler frees allocated memory
for the plane object that was freed by malidp_de_planes_destroy(). Do so
by replacing the call to devm_kfree() in the .destroy() handler by
kfree(). devm_kfree() is currently a no-op as the plane memory is
allocated with kzalloc(), not devm_kzalloc().

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarLiviu Dudau <liviu.dudau@arm.com>
parent d862b2d6
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -531,14 +531,13 @@ int malidp_crtc_init(struct drm_device *drm)

	if (!primary) {
		DRM_ERROR("no primary plane found\n");
		ret = -EINVAL;
		goto crtc_cleanup_planes;
		return -EINVAL;
	}

	ret = drm_crtc_init_with_planes(drm, &malidp->crtc, primary, NULL,
					&malidp_crtc_funcs, NULL);
	if (ret)
		goto crtc_cleanup_planes;
		return ret;

	drm_crtc_helper_add(&malidp->crtc, &malidp_crtc_helper_funcs);
	drm_mode_crtc_set_gamma_size(&malidp->crtc, MALIDP_GAMMA_LUT_SIZE);
@@ -548,9 +547,4 @@ int malidp_crtc_init(struct drm_device *drm)
	malidp_se_set_enh_coeffs(malidp->dev);

	return 0;

crtc_cleanup_planes:
	malidp_de_planes_destroy(drm);

	return ret;
}
+0 −1
Original line number Diff line number Diff line
@@ -278,7 +278,6 @@ static int malidp_init(struct drm_device *drm)

static void malidp_fini(struct drm_device *drm)
{
	malidp_de_planes_destroy(drm);
	drm_mode_config_cleanup(drm);
}

+0 −1
Original line number Diff line number Diff line
@@ -60,7 +60,6 @@ struct malidp_crtc_state {
#define to_malidp_crtc_state(x) container_of(x, struct malidp_crtc_state, base)

int malidp_de_planes_init(struct drm_device *drm);
void malidp_de_planes_destroy(struct drm_device *drm);
int malidp_crtc_init(struct drm_device *drm);

/* often used combination of rotational bits */
+1 −12
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ static void malidp_de_plane_destroy(struct drm_plane *plane)

	drm_plane_helper_disable(plane);
	drm_plane_cleanup(plane);
	devm_kfree(plane->dev->dev, mp);
	kfree(mp);
}

/*
@@ -449,18 +449,7 @@ int malidp_de_planes_init(struct drm_device *drm)
	return 0;

cleanup:
	malidp_de_planes_destroy(drm);
	kfree(formats);

	return ret;
}

void malidp_de_planes_destroy(struct drm_device *drm)
{
	struct drm_plane *p, *pt;

	list_for_each_entry_safe(p, pt, &drm->mode_config.plane_list, head) {
		drm_plane_cleanup(p);
		kfree(p);
	}
}