From: Rob Clark <robdcl...@chromium.org>

v2: rebase

Signed-off-by: Rob Clark <robdcl...@chromium.org>
---
 drivers/gpu/drm/i915/i915_request.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_request.c 
b/drivers/gpu/drm/i915/i915_request.c
index 7503dcb9043b..44491e7e214c 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -97,6 +97,25 @@ static bool i915_fence_enable_signaling(struct dma_fence 
*fence)
        return i915_request_enable_breadcrumb(to_request(fence));
 }
 
+static void i915_fence_set_deadline(struct dma_fence *fence, ktime_t deadline)
+{
+       struct i915_request *rq = to_request(fence);
+
+       if (i915_request_completed(rq))
+               return;
+
+       if (i915_request_started(rq))
+               return;
+
+       /*
+        * TODO something more clever for deadlines that are in the
+        * future.  I think probably track the nearest deadline in
+        * rq->timeline and set timer to trigger boost accordingly?
+        */
+
+       intel_rps_boost(rq);
+}
+
 static signed long i915_fence_wait(struct dma_fence *fence,
                                   bool interruptible,
                                   signed long timeout)
@@ -182,6 +201,7 @@ const struct dma_fence_ops i915_fence_ops = {
        .signaled = i915_fence_signaled,
        .wait = i915_fence_wait,
        .release = i915_fence_release,
+       .set_deadline = i915_fence_set_deadline,
 };
 
 static void irq_execute_cb(struct irq_work *wrk)
-- 
2.39.1

Reply via email to