msm: mdss: false ESD detections due to race condition
There is a race condition between ESD thread and commit thread which causes false ESD detections. This change prevents the condition. Change-Id: I67a480f7251348fc86be01fe8d5414857f53bc75 Signed-off-by: Naseer Ahmed <naseer@codeaurora.org>
This commit is contained in:
parent
40ac095b5b
commit
6b236392b5
4 changed files with 15 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -1000,7 +1000,7 @@ int msm_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
|
||||||
|
|
||||||
if (from_mdp) /* from mdp kickoff */
|
if (from_mdp) /* from mdp kickoff */
|
||||||
mutex_lock(&ctrl->cmd_mutex);
|
mutex_lock(&ctrl->cmd_mutex);
|
||||||
req = mdss_dsi_cmdlist_get(ctrl);
|
req = mdss_dsi_cmdlist_get(ctrl, from_mdp);
|
||||||
|
|
||||||
if (!req) {
|
if (!req) {
|
||||||
mutex_unlock(&ctrl->cmd_mutex);
|
mutex_unlock(&ctrl->cmd_mutex);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -724,7 +724,8 @@ void mdss_dsi_set_tear_off(struct mdss_dsi_ctrl_pdata *ctrl)
|
||||||
/*
|
/*
|
||||||
* mdss_dsi_cmd_get: ctrl->cmd_mutex acquired by caller
|
* mdss_dsi_cmd_get: ctrl->cmd_mutex acquired by caller
|
||||||
*/
|
*/
|
||||||
struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl)
|
struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl,
|
||||||
|
int from_mdp)
|
||||||
{
|
{
|
||||||
struct dcs_cmd_list *clist;
|
struct dcs_cmd_list *clist;
|
||||||
struct dcs_cmd_req *req = NULL;
|
struct dcs_cmd_req *req = NULL;
|
||||||
|
@ -733,6 +734,12 @@ struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl)
|
||||||
clist = &ctrl->cmdlist;
|
clist = &ctrl->cmdlist;
|
||||||
if (clist->get != clist->put) {
|
if (clist->get != clist->put) {
|
||||||
req = &clist->list[clist->get];
|
req = &clist->list[clist->get];
|
||||||
|
/*dont let commit thread steal ESD thread's
|
||||||
|
command*/
|
||||||
|
if (from_mdp && (req->flags & CMD_REQ_COMMIT)) {
|
||||||
|
mutex_unlock(&ctrl->cmdlist_mutex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
clist->get++;
|
clist->get++;
|
||||||
clist->get %= CMD_REQ_MAX;
|
clist->get %= CMD_REQ_MAX;
|
||||||
clist->tot--;
|
clist->tot--;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -133,7 +133,8 @@ int mdss_dsi_short_read2_resp(struct dsi_buf *rp);
|
||||||
int mdss_dsi_long_read_resp(struct dsi_buf *rp);
|
int mdss_dsi_long_read_resp(struct dsi_buf *rp);
|
||||||
void mdss_dsi_set_tear_on(struct mdss_dsi_ctrl_pdata *ctrl);
|
void mdss_dsi_set_tear_on(struct mdss_dsi_ctrl_pdata *ctrl);
|
||||||
void mdss_dsi_set_tear_off(struct mdss_dsi_ctrl_pdata *ctrl);
|
void mdss_dsi_set_tear_off(struct mdss_dsi_ctrl_pdata *ctrl);
|
||||||
struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl);
|
struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl,
|
||||||
|
int from_mdp);
|
||||||
int mdss_dsi_cmdlist_put(struct mdss_dsi_ctrl_pdata *ctrl,
|
int mdss_dsi_cmdlist_put(struct mdss_dsi_ctrl_pdata *ctrl,
|
||||||
struct dcs_cmd_req *cmdreq);
|
struct dcs_cmd_req *cmdreq);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2403,7 +2403,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
|
||||||
roi = &pinfo->roi;
|
roi = &pinfo->roi;
|
||||||
}
|
}
|
||||||
|
|
||||||
req = mdss_dsi_cmdlist_get(ctrl);
|
req = mdss_dsi_cmdlist_get(ctrl, from_mdp);
|
||||||
if (req && from_mdp && ctrl->burst_mode_enabled) {
|
if (req && from_mdp && ctrl->burst_mode_enabled) {
|
||||||
mutex_lock(&ctrl->cmd_mutex);
|
mutex_lock(&ctrl->cmd_mutex);
|
||||||
cmd_mutex_acquired = true;
|
cmd_mutex_acquired = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue