diff options
| author | Xiaoming Zhou <zhoux@codeaurora.org> | 2014-03-26 16:32:36 -0400 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:28:30 -0700 |
| commit | 20cd4e4a73d7f7667fe2bfbb62d535ef2e3f981d (patch) | |
| tree | c814766d522b68dc60d23c026f208468eb5b34fd /drivers | |
| parent | de66a9ddbe8f40e0f8c6633b578aefe562cc3e30 (diff) | |
msm: mdss: add overlay configuration error handling logic
This is to add the error handling logic to catch the wrong
overlay configuration from user space.
Change-Id: I59523de392dcd21309bfa9eb9a944047505df2a3
Signed-off-by: Xiaoming Zhou <zhoux@codeaurora.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/video/fbdev/msm/mdp3_ctrl.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdp3_ctrl.c b/drivers/video/fbdev/msm/mdp3_ctrl.c index 401e1dcf6974..7c9aeaf43513 100644 --- a/drivers/video/fbdev/msm/mdp3_ctrl.c +++ b/drivers/video/fbdev/msm/mdp3_ctrl.c @@ -953,6 +953,7 @@ static int mdp3_overlay_queue_buffer(struct msm_fb_data_type *mfd, struct mdp3_session_data *mdp3_session = mfd->mdp.private1; struct msmfb_data *img = &req->data; struct mdp3_img_data data; + struct mdp3_dma *dma = mdp3_session->dma; rc = mdp3_get_img(img, &data, MDP3_CLIENT_DMA_P); if (rc) { @@ -960,6 +961,12 @@ static int mdp3_overlay_queue_buffer(struct msm_fb_data_type *mfd, return rc; } + if (data.len < dma->source_config.stride * dma->source_config.height) { + pr_err("buf length is smaller than required by dma configuration\n"); + mdp3_put_img(&data, MDP3_CLIENT_DMA_P); + return -EINVAL; + } + rc = mdp3_bufq_push(&mdp3_session->bufq_in, &data); if (rc) { pr_err("fail to queue the overlay buffer, buffer drop\n"); @@ -980,6 +987,12 @@ static int mdp3_overlay_play(struct msm_fb_data_type *mfd, mutex_lock(&mdp3_session->lock); + if (mdp3_session->overlay.id == MSMFB_NEW_REQUEST) { + pr_err("overlay play without overlay set first\n"); + mutex_unlock(&mdp3_session->lock); + return -EINVAL; + } + if (mfd->panel_power_on) rc = mdp3_overlay_queue_buffer(mfd, req); else |
