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

Commit 9f8fa3ac authored by Jayant Shekhar's avatar Jayant Shekhar Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: fix user blob memory leak



In case of framework reboot, currently user blobs are
not getting freed even after msm last close. This is
because the ref count acquired during atomic set is
not unreferenced after applying default property in
last commit. Ensure last unreference is done on blob
properties during close.

Change-Id: I6e075785e59c4e354f75f617c1c88fc00114ac60
Signed-off-by: default avatarJayant Shekhar <jshekhar@codeaurora.org>
[cohens@codeaurora.org: Resolved merge conflict porting to 4.14]
Signed-off-by: default avatarSteve Cohen <cohens@codeaurora.org>
parent 38ee3a0f
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -381,24 +381,29 @@ int msm_property_atomic_set(struct msm_property_info *info,
	} else {
		/* extra handling for incoming properties */
		mutex_lock(&info->property_lock);
		if (val && (property->flags & DRM_MODE_PROP_BLOB) &&
		if ((property->flags & DRM_MODE_PROP_BLOB) &&
			(property_idx < info->blob_count)) {

			/* need to clear previous ref */
			if (property_state->values[property_idx].blob)
				drm_property_blob_put(
					property_state->values[
						property_idx].blob);

			/* DRM lookup also takes a reference */
			blob = drm_property_lookup_blob(info->dev,
				(uint32_t)val);
			if (!blob) {
			if (val && !blob) {
				DRM_ERROR("prop %d blob id 0x%llx not found\n",
						property_idx, val);
				val = 0;
			} else {
				if (blob) {
					DBG("Blob %u saved", blob->base.id);
					val = blob->base.id;
				}

				/* save blob - need to clear previous ref */
				if (property_state->values[property_idx].blob)
					drm_property_blob_put(
						property_state->values[
						property_idx].blob);
				/* save the new blob */
				property_state->values[property_idx].blob =
					blob;
			}