summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuogee Hsieh <khsieh@codeaurora.org>2014-12-03 09:27:50 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:36:37 -0700
commit2caa0b46c7b180a9895a765478ff65603eba6066 (patch)
tree1a333dedb6c897b7a0da842bb25ff902f5168116
parentc7148fab72a3cb55378e6410093c8026414a1a40 (diff)
msm: mdss: spin lock is necessary when reset rdptr_enabled
At cmd_stop, spin lock protection is necessary when reset rdptr_enabled to 1. Otherwise race condition may happen and cause timeout. CRs-Fixed: 766216 Change-Id: I128f73a069d3068c852f4b25c6515ec834e82162 Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
index e43137fd7cd5..e7fb1f660286 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
@@ -859,6 +859,7 @@ int mdss_mdp_cmd_intfs_stop(struct mdss_mdp_ctl *ctl, int session,
struct mdss_mdp_cmd_ctx *sctx = NULL;
struct mdss_mdp_cmd_ctx *ctx;
unsigned long flags;
+ unsigned long sflags;
int need_wait = 0;
int ret = 0;
int hz;
@@ -894,8 +895,12 @@ int mdss_mdp_cmd_intfs_stop(struct mdss_mdp_ctl *ctl, int session,
* next vsync if there has no kickoff pending
*/
ctx->rdptr_enabled = 1;
- if (sctx && sctx->rdptr_enabled)
- sctx->rdptr_enabled = 1;
+ if (sctx) {
+ spin_lock_irqsave(&sctx->clk_lock, sflags);
+ if (sctx->rdptr_enabled)
+ sctx->rdptr_enabled = 1;
+ spin_unlock_irqrestore(&sctx->clk_lock, sflags);
+ }
}
spin_unlock_irqrestore(&ctx->clk_lock, flags);