@@ -94,7 +94,12 @@ static bool i915_fence_signaled(struct dma_fence *fence)
static bool i915_fence_enable_signaling(struct dma_fence *fence)
{
- return i915_request_enable_breadcrumb(to_request(fence));
+ struct i915_request *rq = to_request(fence);
+
+ if (dma_fence_wait_count(&rq->fence) && !i915_request_started(rq))
+ intel_rps_boost(rq);
+
+ return i915_request_enable_breadcrumb(rq);
}
static signed long i915_fence_wait(struct dma_fence *fence,
@@ -2037,11 +2042,13 @@ long i915_request_wait_timeout(struct i915_request *rq,
* but at a cost of spending more power processing the workload
* (bad for battery).
*/
- if (flags & I915_WAIT_PRIORITY && !i915_request_started(rq))
+ if (((flags & I915_WAIT_PRIORITY) || dma_fence_wait_count(&rq->fence))
+ && !i915_request_started(rq))
intel_rps_boost(rq);
wait.tsk = current;
- if (dma_fence_add_callback(&rq->fence, &wait.cb, request_wait_wake))
+ if (dma_fence_add_wait_callback(&rq->fence, &wait.cb,
+ request_wait_wake))
goto out;
/*