From: Ville Syrj?l? <ville.syrj...@linux.intel.com>

Sprinkle drm_vblank_on() calls to the .crtc_enable() callbacks.
Also drop the drm_vblank_{pre,post}_modeset() calls since those
are now useless.

Testcase: igt/kms_flip/{dpms,modeset}-vs-vblank-race
Signed-off-by: Ville Syrj?l? <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 7e8bfd8..87895dd 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3612,6 +3612,8 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
         * happening.
         */
        intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+       drm_vblank_on(dev, pipe);
 }

 /* IPS only exists on ULT machines and is tied to pipe A. */
@@ -3637,6 +3639,8 @@ static void haswell_crtc_enable_planes(struct drm_crtc 
*crtc)
        mutex_lock(&dev->struct_mutex);
        intel_update_fbc(dev);
        mutex_unlock(&dev->struct_mutex);
+
+       drm_vblank_on(dev, pipe);
 }

 static void haswell_crtc_disable_planes(struct drm_crtc *crtc)
@@ -4235,6 +4239,8 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)

        for_each_encoder_on_crtc(dev, crtc, encoder)
                encoder->enable(encoder);
+
+       drm_vblank_on(dev, pipe);
 }

 static void i9xx_crtc_enable(struct drm_crtc *crtc)
@@ -4280,6 +4286,8 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)

        for_each_encoder_on_crtc(dev, crtc, encoder)
                encoder->enable(encoder);
+
+       drm_vblank_on(dev, pipe);
 }

 static void i9xx_pfit_disable(struct intel_crtc *crtc)
@@ -7014,15 +7022,10 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
        struct intel_encoder *encoder;
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
        struct drm_display_mode *mode = &intel_crtc->config.requested_mode;
-       int pipe = intel_crtc->pipe;
        int ret;

-       drm_vblank_pre_modeset(dev, pipe);
-
        ret = dev_priv->display.crtc_mode_set(crtc, x, y, fb);

-       drm_vblank_post_modeset(dev, pipe);
-
        if (ret != 0)
                return ret;

-- 
1.8.3.2

Reply via email to