From 20cd4e4a73d7f7667fe2bfbb62d535ef2e3f981d Mon Sep 17 00:00:00 2001 From: Xiaoming Zhou Date: Wed, 26 Mar 2014 16:32:36 -0400 Subject: 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 --- drivers/video/fbdev/msm/mdp3_ctrl.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 -- cgit v1.2.3