diff options
| author | Adrian Salido-Moreno <adrianm@codeaurora.org> | 2013-01-28 17:02:44 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:14:47 -0700 |
| commit | 5a5eadca6b554ace95b5f3fc47d5fa6ea35fbf54 (patch) | |
| tree | 0190cf7df776b4585d80cecf15a147ed910f6551 /drivers/video/fbdev | |
| parent | 39e377118c086756e1c5cfdf1c890fcf43d796f4 (diff) | |
msm: mdss: handle memory mapping failures
Properly handle errors seen while mapping ion buffers, free memory only
for planes which were succesfully mapped to avoid issues.
CRs-Fixed: 444379
Change-Id: I70fc2402d2088f7766f4d958dbdc2bddbb53abcd
Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 6c4a08f7f97b..5e9659f6297a 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -415,25 +415,28 @@ static inline int mdss_mdp_overlay_get_buf(struct msm_fb_data_type *mfd, int num_planes, u32 flags) { - int i; + int i, rc = 0; + + if ((num_planes <= 0) || (num_planes > MAX_PLANES)) + return -EINVAL; memset(data, 0, sizeof(*data)); for (i = 0; i < num_planes; i++) { data->p[i].flags = flags; - mdss_mdp_get_img(&planes[i], &data->p[i]); - if (data->p[0].len == 0) + rc = mdss_mdp_get_img(&planes[i], &data->p[i]); + if (rc) { + pr_err("failed to map buf p=%d flags=%x\n", i, flags); + while (i > 0) { + i--; + mdss_mdp_put_img(&data->p[i]); + } break; + } } - if (i != num_planes) { - for (; i >= 0; i--) - mdss_mdp_put_img(&data->p[i]); - return -ENOMEM; - } - - data->num_planes = num_planes; + data->num_planes = i; - return 0; + return rc; } static inline int mdss_mdp_overlay_free_buf(struct mdss_mdp_data *data) |
