diff options
| author | Padmanabhan Komanduru <pkomandu@codeaurora.org> | 2014-08-13 15:19:29 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:33:12 -0700 |
| commit | f14c07db663d4d584ceceb2ea352f92c9032df06 (patch) | |
| tree | e972585829e1476f98f8778166181e29bc92ed78 /drivers/video/fbdev | |
| parent | 55ee09727a36e62ae4cf0403bf27a145d473107e (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.c | 6 |
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, |
