From f14c07db663d4d584ceceb2ea352f92c9032df06 Mon Sep 17 00:00:00 2001 From: Padmanabhan Komanduru Date: Wed, 13 Aug 2014 15:19:29 +0530 Subject: 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 --- drivers/video/fbdev/msm/mdss_dsi_status.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'drivers') 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, -- cgit v1.2.3