disp: msm: sde: cache encoder_mask for vblank_work

There is a race between disable commit swap-state on display
thread and vblank work on event thread which may skip applying
the vblank vote if the encoder_mask has already been cleared.
To avoid the race, use a cached encoder_mask that is gauranteed
to be valid between the vblank_on and vblank_off calls.

Also, vblank queue work is initializing a variable that's never
used and msm_disable_outputs has 2 instances of pointers to old
CRTC state. Remove this dead code.

Change-Id: I5e4a482b8f067e272a2aef5afa08cc0e1ab89434
Signed-off-by: Steve Cohen <cohens@codeaurora.org>
Šī revīzija ir iekļauta:
Steve Cohen
2020-11-11 14:37:10 -05:00
vecāks 7a98aa2134
revīzija aa064ada86
4 mainīti faili ar 23 papildinājumiem un 25 dzēšanām

Parādīt failu

@@ -366,7 +366,6 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
int crtc_id, bool enable)
{
struct vblank_work *cur_work;
struct drm_crtc *crtc;
struct kthread_worker *worker;
if (!priv || crtc_id >= priv->num_crtcs)
@@ -376,8 +375,6 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
if (!cur_work)
return -ENOMEM;
crtc = priv->crtcs[crtc_id];
kthread_init_work(&cur_work->work, vblank_ctrl_worker);
cur_work->crtc_id = crtc_id;
cur_work->enable = enable;