All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Queue page flip work with high priority
@ 2016-09-12 14:09 Imre Deak
  2016-09-12 14:52 ` ✓ Fi.CI.BAT: success for " Patchwork
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Imre Deak @ 2016-09-12 14:09 UTC (permalink / raw)
  To: intel-gfx

While user space has control over the scheduling priority of its page
flipping thread, the corresponding work the driver schedules for MMIO
flips always runs with normal scheduling priority. This would hinder an
application that wants more stringent guarantees over flip timing (to
avoid missing a flip at the next frame count).

Fix this by scheduling the work with high priority, meaning normal
scheduling policy with -20 nice level.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97775
Testcase: igt/kms_cursor_legacy
CC: Chris Wilson <chris@chris-wilson.co.uk>
CC: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c      | 7 +++++++
 drivers/gpu/drm/i915/i915_drv.h      | 4 ++++
 drivers/gpu/drm/i915/intel_display.c | 2 +-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 02c34d6..381ef23 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -756,8 +756,14 @@ static int i915_workqueues_init(struct drm_i915_private *dev_priv)
 	if (dev_priv->hotplug.dp_wq == NULL)
 		goto out_free_wq;
 
+	dev_priv->flip_wq = alloc_workqueue("i915-flip", WQ_HIGHPRI, 0);
+	if (dev_priv->flip_wq == NULL)
+		goto out_free_dp_wq;
+
 	return 0;
 
+out_free_dp_wq:
+	destroy_workqueue(dev_priv->hotplug.dp_wq);
 out_free_wq:
 	destroy_workqueue(dev_priv->wq);
 out_err:
@@ -768,6 +774,7 @@ out_err:
 
 static void i915_workqueues_cleanup(struct drm_i915_private *dev_priv)
 {
+	destroy_workqueue(dev_priv->flip_wq);
 	destroy_workqueue(dev_priv->hotplug.dp_wq);
 	destroy_workqueue(dev_priv->wq);
 }
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f499fa5..3653ce4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1844,6 +1844,10 @@ struct drm_i915_private {
 	 * result in deadlocks.
 	 */
 	struct workqueue_struct *wq;
+	/**
+	 * flip_wq - High priority flip workqueue.
+	 */
+	struct workqueue_struct *flip_wq;
 
 	/* Display functions */
 	struct drm_i915_display_funcs display;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3c367d0..48433e1 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12278,7 +12278,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
 
 		work->flip_queued_req = i915_gem_active_get(&obj->last_write,
 							    &obj->base.dev->struct_mutex);
-		schedule_work(&work->mmio_work);
+		queue_work(dev_priv->flip_wq, &work->mmio_work);
 	} else {
 		request = i915_gem_request_alloc(engine, engine->last_context);
 		if (IS_ERR(request)) {
-- 
2.5.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2016-09-21 13:48 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-12 14:09 [PATCH] drm/i915: Queue page flip work with high priority Imre Deak
2016-09-12 14:52 ` ✓ Fi.CI.BAT: success for " Patchwork
2016-09-13 10:24 ` [PATCH] " Tvrtko Ursulin
2016-09-13 10:31   ` Imre Deak
2016-09-13 11:12     ` Tvrtko Ursulin
2016-09-14 11:02       ` Imre Deak
2016-09-13 10:32   ` Chris Wilson
2016-09-13 10:48     ` Imre Deak
2016-09-14 17:07 ` [PATCH v2] drm/i915: Queue page flip work via a low latency, unbound workqueue Imre Deak
2016-09-15  8:44   ` Maarten Lankhorst
2016-09-15 11:30     ` Imre Deak
2016-09-20 11:58   ` [PATCH v3] " Imre Deak
2016-09-20 12:51     ` Chris Wilson
2016-09-20 12:56       ` Maarten Lankhorst
2016-09-14 17:54 ` ✗ Fi.CI.BAT: failure for drm/i915: Queue page flip work with high priority (rev2) Patchwork
2016-09-15  7:20 ` ✗ Fi.CI.BAT: warning " Patchwork
2016-09-20 12:24 ` ✗ Fi.CI.BAT: warning for drm/i915: Queue page flip work with high priority (rev3) Patchwork
2016-09-21 13:48   ` Imre Deak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.