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:
@@ -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;
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user