diff options
author | Jayant Shekhar <jshekhar@codeaurora.org> | 2015-01-06 10:36:51 +0530 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:46:33 -0700 |
commit | e9bc670954414d439020abfa706a066dc042c257 (patch) | |
tree | dbf80f8411e5d871c62bdfa3fcf5ad8a2a53eca3 | |
parent | a4738a73fdc254f27574b0860e7419dc7c1a64f8 (diff) |
msm: mdss: Use heap instead of stack for panel_info in check var
If add new elements to the structure mdss_panel_info, there
are possibilities to run into build errors as local variable
of mdss_panel_info in function mdss_fb_check_var has huge
size which crossing the 2048 limit. Hence use heap instead
of stack for mdss_panel_info.
Change-Id: I1f07c2f00f5bf6cb494859a85108e3dab8775293
Signed-off-by: Jayant Shekhar <jshekhar@codeaurora.org>
-rw-r--r-- | drivers/video/fbdev/msm/mdss_fb.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c index 567baf9c6c93..d3f3d22d89c8 100644 --- a/drivers/video/fbdev/msm/mdss_fb.c +++ b/drivers/video/fbdev/msm/mdss_fb.c @@ -3490,16 +3490,24 @@ static int mdss_fb_check_var(struct fb_var_screeninfo *var, if (mode == NULL) return -EINVAL; } else if (mfd->panel_info && !(var->activate & FB_ACTIVATE_TEST)) { + struct mdss_panel_info *panel_info; int rc; + panel_info = kzalloc(sizeof(struct mdss_panel_info), + GFP_KERNEL); + if (!panel_info) + return -ENOMEM; - memcpy(&mfd->reconfig_panel_info, mfd->panel_info, - sizeof(mfd->reconfig_panel_info)); - mdss_fb_var_to_panelinfo(var, &mfd->reconfig_panel_info); + memcpy(panel_info, mfd->panel_info, + sizeof(struct mdss_panel_info)); + mdss_fb_var_to_panelinfo(var, panel_info); rc = mdss_fb_send_panel_event(mfd, MDSS_EVENT_CHECK_PARAMS, - &mfd->reconfig_panel_info); - if (IS_ERR_VALUE(rc)) + panel_info); + if (IS_ERR_VALUE(rc)) { + kfree(panel_info); return rc; + } mfd->panel_reconfig = rc; + kfree(panel_info); } return 0; |