Throttle after every vblank and when > 64 updates are queued, to prevent running
higher than max pin count.

For now there's no good way to do fold crtc updates, and to ensure that
we don't run out of cursor pins the best option is to throttle.

Testcase: kms_cursor_legacy
Cc: Ville Syrjälä <[email protected]>
Fixes: a6747b7304a9 ("drm/i915: Make unpin async.")
Signed-off-by: Maarten Lankhorst <[email protected]>
---
 drivers/gpu/drm/i915/intel_display.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 21c0a2f3102b..876484270cd2 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12740,14 +12740,22 @@ static int intel_atomic_prepare_commit(struct 
drm_device *dev,
                struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
                struct intel_flip_work *work;
 
-               if (!state->legacy_cursor_update) {
+               if (!state->legacy_cursor_update ||
+                   atomic_read(&intel_crtc->unpin_work_count) >= 64) {
                        ret = intel_crtc_wait_for_pending_flips(crtc, true);
                        if (ret)
                                return ret;
 
                        if (atomic_read(&intel_crtc->unpin_work_count) >= 2)
                                flush_workqueue(dev_priv->wq);
-               }
+               } else if (list_empty_careful(&intel_crtc->flip_work) &&
+                          atomic_read(&intel_crtc->unpin_work_count) >= 2)
+                       /*
+                        * When running a legacy_cursor_update only load,
+                        * unpin_work may never run. Flush after a vblank
+                        * happened to ensure it does.
+                        */
+                       flush_workqueue(dev_priv->wq);
 
                /* test if we need to update something */
                if (!needs_work(crtc_state))
-- 
2.5.5

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to