Loading drivers/video/msm/mdss/mdss_fb.c +13 −10 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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"); Loading @@ -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) Loading @@ -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); Loading drivers/video/msm/mdss/mdss_fb.h +2 −1 Original line number Diff line number Diff line Loading @@ -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); Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +1 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading
drivers/video/msm/mdss/mdss_fb.c +13 −10 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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"); Loading @@ -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) Loading @@ -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); Loading
drivers/video/msm/mdss/mdss_fb.h +2 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +1 −2 Original line number Diff line number Diff line Loading @@ -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); Loading