diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index 3247e2e61d03..7b4eb6982b1e 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -874,6 +874,7 @@ void mdss_mdp_ctl_notifier_register(struct mdss_mdp_ctl *ctl, struct notifier_block *notifier); void mdss_mdp_ctl_notifier_unregister(struct mdss_mdp_ctl *ctl, struct notifier_block *notifier); +u32 mdss_mdp_ctl_perf_get_transaction_status(struct mdss_mdp_ctl *ctl); int mdss_mdp_scan_pipes(void); diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c index e7fb1f660286..cd88132160b8 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c @@ -363,6 +363,7 @@ static void mdss_mdp_cmd_pingpong_done(void *arg) struct mdss_mdp_cmd_ctx *ctx = ctl->priv_data; struct mdss_mdp_vsync_handler *tmp; ktime_t vsync_time; + u32 status; if (!ctx) { pr_err("%s: invalid ctx\n", __func__); @@ -390,7 +391,9 @@ static void mdss_mdp_cmd_pingpong_done(void *arg) atomic_read(&ctx->koff_cnt)); if (mdss_mdp_cmd_do_notifier(ctx)) { atomic_inc(&ctx->pp_done_cnt); - schedule_work(&ctx->pp_done_work); + status = mdss_mdp_ctl_perf_get_transaction_status(ctl); + if (status == 0) + schedule_work(&ctx->pp_done_work); } wake_up_all(&ctx->pp_waitq); } else {