summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirmal Abraham <nabrah@codeaurora.org>2018-07-17 15:49:19 +0530
committerAnimesh Kishore <animeshk@codeaurora.org>2018-07-19 18:19:32 +0530
commit5dda52d4de3d6552d8c3eec39ee70de0f83dbc12 (patch)
treef3d0d2751b33e351d6586998ea4c20509cddb0f0
parentedbebfaaf23578cf090aedf5aca2e8491bf38043 (diff)
msm: mdss: cleanup used pipes during overlay off
During overlay off, cleanup pipes which are currently active in used pipes list. This is to avoid to a race condition wherein the pipe params gets changed in prepare cycle, but the commit cylce has not executed to queue the buffers associated with the pipe and the same pipe which has old buffer(stale content) gets used from overlay_off flow. Change-Id: I117e6ee9854ff287f7bb1055ca745760db980bed Signed-off-by: Nirmal Abraham <nabrah@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
index 2f5b45638cdb..f3d125af4830 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
@@ -5815,6 +5815,7 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd)
int rc;
struct mdss_overlay_private *mdp5_data;
struct mdss_mdp_mixer *mixer;
+ struct mdss_mdp_pipe *pipe, *tmp;
int need_cleanup;
int retire_cnt;
bool destroy_ctl = false;
@@ -5870,6 +5871,13 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd)
mixer->cursor_enabled = 0;
mutex_lock(&mdp5_data->list_lock);
+ if (!list_empty(&mdp5_data->pipes_used)) {
+ list_for_each_entry_safe(
+ pipe, tmp, &mdp5_data->pipes_used, list) {
+ pipe->file = NULL;
+ list_move(&pipe->list, &mdp5_data->pipes_cleanup);
+ }
+ }
need_cleanup = !list_empty(&mdp5_data->pipes_cleanup);
mutex_unlock(&mdp5_data->list_lock);
mutex_unlock(&mdp5_data->ov_lock);