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

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

Merge "msm: mdss: release pipes associated with respective process"

parents a354fe29 bf7428a5
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -2024,6 +2024,9 @@ static int mdss_fb_release_all(struct fb_info *info, bool release_all)
	if (unknown_pid) {
		pinfo = mdss_fb_release_file_entry(info, NULL, false);
		if (pinfo) {
			pr_debug("found known pid=%d reference for unknown caller pid=%d\n",
						pinfo->pid, pid);
			pid = pinfo->pid;
			mfd->ref_cnt--;
			pinfo->ref_cnt--;
			pm_runtime_put(info->dev);
@@ -2039,14 +2042,14 @@ static int mdss_fb_release_all(struct fb_info *info, bool release_all)
	}

	if (release_needed) {
		pr_debug("known process %s pid=%d mfd->ref=%d\n",
			task->comm, pid, mfd->ref_cnt);
		pr_debug("current process=%s pid=%d known pid=%d mfd->ref=%d\n",
			task->comm, current->tgid, pid, mfd->ref_cnt);

		if (mfd->mdp.release_fnc) {
			ret = mfd->mdp.release_fnc(mfd, false);
			ret = mfd->mdp.release_fnc(mfd, false, pid);
			if (ret)
				pr_err("error releasing fb%d pid=%d\n",
					mfd->index, pid);
				pr_err("error releasing fb%d for current pid=%d known pid=%d\n",
					mfd->index, current->tgid, pid);
		}
	} else if (release_all && mfd->ref_cnt) {
		pr_err("reference count mismatch with proc list entries\n");
@@ -2059,10 +2062,10 @@ static int mdss_fb_release_all(struct fb_info *info, bool release_all)
		}

		if (mfd->mdp.release_fnc) {
			ret = mfd->mdp.release_fnc(mfd, true);
			ret = mfd->mdp.release_fnc(mfd, true, pid);
			if (ret)
				pr_err("error fb%d release process %s pid=%d\n",
					mfd->index, task->comm, pid);
				pr_err("error fb%d release current process=%s pid=%d known pid=%d\n",
				    mfd->index, task->comm, current->tgid, pid);
		}

		if (mfd->fb_ion_handle)
@@ -2071,8 +2074,8 @@ static int mdss_fb_release_all(struct fb_info *info, bool release_all)
		ret = mdss_fb_blank_sub(FB_BLANK_POWERDOWN, info,
			mfd->op_enable);
		if (ret) {
			pr_err("can't turn off fb%d! rc=%d process %s pid=%d\n",
				mfd->index, ret, task->comm, pid);
			pr_err("can't turn off fb%d! rc=%d current process=%s pid=%d known pid=%d\n",
			      mfd->index, ret, task->comm, current->tgid, pid);
			return ret;
		}
		atomic_set(&mfd->ioctl_ref_cnt, 0);
+2 −1
Original line number Diff line number Diff line
@@ -130,7 +130,8 @@ struct msm_mdp_interface {
	int (*on_fnc)(struct msm_fb_data_type *mfd);
	int (*off_fnc)(struct msm_fb_data_type *mfd);
	/* called to release resources associated to the process */
	int (*release_fnc)(struct msm_fb_data_type *mfd, bool release_all);
	int (*release_fnc)(struct msm_fb_data_type *mfd, bool release_all,
				uint32_t pid);
	int (*kickoff_fnc)(struct msm_fb_data_type *mfd,
					struct mdp_display_commit *data);
	int (*ioctl_handler)(struct msm_fb_data_type *mfd, u32 cmd, void *arg);
+1 −2
Original line number Diff line number Diff line
@@ -1618,14 +1618,13 @@ done:
 * on fb_release to release any overlays/rotator sessions left open.
 */
static int __mdss_mdp_overlay_release_all(struct msm_fb_data_type *mfd,
	bool release_all)
	bool release_all, uint32_t pid)
{
	struct mdss_mdp_pipe *pipe;
	struct mdss_mdp_rotator_session *rot, *tmp;
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
	u32 unset_ndx = 0;
	int cnt = 0;
	int pid = current->tgid;

	pr_debug("releasing all resources for fb%d pid=%d\n", mfd->index, pid);