summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorPadmanabhan Komanduru <pkomandu@codeaurora.org>2014-08-13 15:19:29 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:33:12 -0700
commitf14c07db663d4d584ceceb2ea352f92c9032df06 (patch)
treee972585829e1476f98f8778166181e29bc92ed78 /drivers/video/fbdev
parent55ee09727a36e62ae4cf0403bf27a145d473107e (diff)
msm: mdss: check for validity of ESD thread before scheduling it
Before scheduling the ESD thread during fb_event_callback and updating the relevant data structures, check if ESD is valid for that particular frame buffer. This avoids issues during WFD connect use cases, where the dsi_status_data's mfd structure gets corrupted with FB1 and leads to target crash during the next ESD check due to invalid pointer dereferences. Change-Id: Ia50a0b3c1ee74c4f574da6960a1b6d1707c3a89f Signed-off-by: Padmanabhan Komanduru <pkomandu@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_status.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi_status.c b/drivers/video/fbdev/msm/mdss_dsi_status.c
index 37cf523bd722..bfabda8cdeea 100644
--- a/drivers/video/fbdev/msm/mdss_dsi_status.c
+++ b/drivers/video/fbdev/msm/mdss_dsi_status.c
@@ -87,14 +87,15 @@ static int fb_event_callback(struct notifier_block *self,
struct dsi_status_data, fb_notifier);
struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL;
struct mdss_panel_info *pinfo;
+ struct msm_fb_data_type *mfd;
if (!evdata) {
pr_err("%s: event data not available\n", __func__);
return NOTIFY_BAD;
}
- pdata->mfd = evdata->info->par;
- ctrl_pdata = container_of(dev_get_platdata(&pdata->mfd->pdev->dev),
+ mfd = evdata->info->par;
+ ctrl_pdata = container_of(dev_get_platdata(&mfd->pdev->dev),
struct mdss_dsi_ctrl_pdata, panel_data);
if (!ctrl_pdata) {
pr_err("%s: DSI ctrl not available\n", __func__);
@@ -113,6 +114,7 @@ static int fb_event_callback(struct notifier_block *self,
return NOTIFY_DONE;
}
+ pdata->mfd = evdata->info->par;
if (event == FB_EVENT_BLANK) {
int *blank = evdata->data;
struct dsi_status_data *pdata = container_of(self,