disp: msm: sde: manage vblank refcount concurrency
Vblank refcount can reach out of sync with below case 1. event_thread triggers the vblank_enable 2. commit_thread triggers the modeset 2.a modeset resets the vblank refcount with mode_set 3. event_thread triggers the vblank_disable Event 2.a resets the vblank refcount and vblank disable request after 2.a is going to fail. This can be fixed by avoiding concurrency between mode_set call and vblank request. Change-Id: Ibb810ec90e81d63feee443f1c37dd736d5cfac0d Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

父節點
743dc695c4
當前提交
44cde01fc7
@@ -365,15 +365,7 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
|
||||
cur_work->crtc_id = crtc_id;
|
||||
cur_work->enable = enable;
|
||||
cur_work->priv = priv;
|
||||
|
||||
/* During modeset scenario, vblank request is queued to
|
||||
* display thread to avoid enabling irq resulting in
|
||||
* vblank refcount mismatch
|
||||
*/
|
||||
if (crtc->state && drm_atomic_crtc_needs_modeset(crtc->state))
|
||||
worker = &priv->disp_thread[crtc_id].worker;
|
||||
else
|
||||
worker = &priv->event_thread[crtc_id].worker;
|
||||
worker = &priv->event_thread[crtc_id].worker;
|
||||
|
||||
kthread_queue_work(worker, &cur_work->work);
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user