msm: mdss: call wait4comp before wb kickoff

when wfd is tear down, HW still fetch the address of buffer queue
which was already released and while cancelling the buffer cause the
iommu page fault. Call wait4comp before kickoff is called to avoid
iommu page fault.

Change-Id: Ia597b395e13072374cfe3d5fa8216363946bff16
Signed-off-by: Raghavendra Ambadas <rambad@codeaurora.org>
This commit is contained in:
raghavendra ambadas 2014-10-09 15:48:29 +05:30 committed by David Keitel
parent 3237117000
commit 57186ab946

View file

@ -557,6 +557,7 @@ static int mdss_mdp_wb_dequeue(struct msm_fb_data_type *mfd,
{
struct mdss_mdp_wb *wb = mfd_to_wb(mfd);
struct mdss_mdp_wb_data *node = NULL;
struct mdss_mdp_ctl *ctl = mfd_to_ctl(mfd);
int ret;
if (!wb) {
@ -564,6 +565,11 @@ static int mdss_mdp_wb_dequeue(struct msm_fb_data_type *mfd,
return -ENODEV;
}
if (!ctl) {
pr_err("unable to dequeue, ctl is not initialized\n");
return -ENODEV;
}
ret = wait_event_interruptible(wb->wait_q, is_buffer_ready(wb));
if (ret) {
pr_err("failed to get dequeued buffer\n");
@ -573,6 +579,7 @@ static int mdss_mdp_wb_dequeue(struct msm_fb_data_type *mfd,
mutex_lock(&wb->lock);
if (wb->state == WB_STOPING) {
pr_debug("wfd stopped\n");
mdss_mdp_display_wait4comp(ctl);
wb->state = WB_STOP;
ret = -ENOBUFS;
} else if (!list_empty(&wb->busy_queue)) {