Commit 318ec320 authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915: Move the min/max scanline sanity check into intel_vblank_evade()

There isn't really any reason to make the caller suffer through
checking the vblank evasion min/max scanlines. If we somehow
ended up with bogus values (which really shouldn't happen)
then just skip the actual vblank evasion loop but otherwise
plow ahead as normal.

The only "real" change is that we now get+put a vblank reference
even if the min/max values are bogus, previously we skipped
directly to the end.
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231213102519.13500-7-ville.syrjala@linux.intel.comReviewed-by: default avatarUma Shankar <uma.shankar@intel.com>
parent b5ad7ce0
...@@ -544,6 +544,9 @@ static int intel_vblank_evade(struct intel_vblank_evade_ctx *evade) ...@@ -544,6 +544,9 @@ static int intel_vblank_evade(struct intel_vblank_evade_ctx *evade)
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
int scanline; int scanline;
if (evade->min <= 0 || evade->max <= 0)
return 0;
for (;;) { for (;;) {
/* /*
* prepare_to_wait() has a memory barrier, which guarantees * prepare_to_wait() has a memory barrier, which guarantees
...@@ -633,8 +636,6 @@ void intel_pipe_update_start(struct intel_atomic_state *state, ...@@ -633,8 +636,6 @@ void intel_pipe_update_start(struct intel_atomic_state *state,
intel_crtc_vblank_work_init(new_crtc_state); intel_crtc_vblank_work_init(new_crtc_state);
intel_vblank_evade_init(old_crtc_state, new_crtc_state, &evade); intel_vblank_evade_init(old_crtc_state, new_crtc_state, &evade);
if (evade.min <= 0 || evade.max <= 0)
goto irq_disable;
if (drm_WARN_ON(&dev_priv->drm, drm_crtc_vblank_get(&crtc->base))) if (drm_WARN_ON(&dev_priv->drm, drm_crtc_vblank_get(&crtc->base)))
goto irq_disable; goto irq_disable;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment