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

Commit b01b3348 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: sde: fix deadlock issue in concurrency test"

parents c762445e c2beb408
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include "sde_kms.h"
#include "sde_connector.h"
#include "sde_backlight.h"
#include "sde_splash.h"

#define SDE_DEBUG_CONN(c, fmt, ...) SDE_DEBUG("conn%d " fmt,\
		(c) ? (c)->base.base.id : -1, ##__VA_ARGS__)
@@ -567,13 +568,35 @@ void sde_connector_prepare_fence(struct drm_connector *connector)

void sde_connector_complete_commit(struct drm_connector *connector)
{
	struct drm_device *dev;
	struct msm_drm_private *priv;
	struct sde_connector *c_conn;
	struct sde_kms *sde_kms;

	if (!connector) {
		SDE_ERROR("invalid connector\n");
		return;
	}

	dev = connector->dev;
	priv = dev->dev_private;
	sde_kms = to_sde_kms(priv->kms);

	/* signal connector's retire fence */
	sde_fence_signal(&to_sde_connector(connector)->retire_fence, 0);

	/* after first vsync comes,
	 * early splash resource should start to be released.
	 */
	if (sde_splash_get_lk_complete_status(&sde_kms->splash_info)) {
		c_conn = to_sde_connector(connector);

		sde_splash_clean_up_free_resource(priv->kms,
						&priv->phandle,
						c_conn->connector_type,
						c_conn->display);
	}

}

static int sde_connector_dpms(struct drm_connector *connector,
+1 −26
Original line number Diff line number Diff line
@@ -600,23 +600,14 @@ void sde_crtc_complete_commit(struct drm_crtc *crtc,
{
	struct sde_crtc *sde_crtc;
	struct sde_crtc_state *cstate;
	struct drm_connector *conn;
	struct sde_connector *c_conn;
	struct drm_device *dev;
	struct msm_drm_private *priv;
	struct sde_kms *sde_kms;
	int i;

	if (!crtc || !crtc->state || !crtc->dev) {
	if (!crtc || !crtc->state) {
		SDE_ERROR("invalid crtc\n");
		return;
	}

	dev = crtc->dev;
	priv = dev->dev_private;

	sde_crtc = to_sde_crtc(crtc);
	sde_kms = _sde_crtc_get_kms(crtc);
	cstate = to_sde_crtc_state(crtc->state);
	SDE_EVT32(DRMID(crtc));

@@ -625,22 +616,6 @@ void sde_crtc_complete_commit(struct drm_crtc *crtc,

	for (i = 0; i < cstate->num_connectors; ++i)
		sde_connector_complete_commit(cstate->connectors[i]);

	if (sde_splash_get_lk_complete_status(&sde_kms->splash_info)) {
		mutex_lock(&dev->mode_config.mutex);
		drm_for_each_connector(conn, crtc->dev) {
			if (conn->state->crtc != crtc)
				continue;

			c_conn = to_sde_connector(conn);

			sde_splash_clean_up_free_resource(priv->kms,
					&priv->phandle,
					c_conn->connector_type,
					c_conn->display);
		}
		mutex_unlock(&dev->mode_config.mutex);
	}
}

/**