[PATCH 85/87] drm/i915/preemption: Select timeout when scheduling
Chris Wilson
chris at chris-wilson.co.uk
Sat Mar 24 11:42:01 UTC 2018
---
drivers/gpu/drm/i915/i915_gem.c | 2 +-
drivers/gpu/drm/i915/i915_request.c | 2 +-
drivers/gpu/drm/i915/intel_lrc.c | 17 ++++++++++-------
drivers/gpu/drm/i915/intel_ringbuffer.h | 6 ++++--
4 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 6e569efd6535..c2875e109e7c 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -483,7 +483,7 @@ static void __fence_set_priority(struct dma_fence *fence, int prio)
rcu_read_lock();
if (engine->schedule)
- engine->schedule(rq, prio);
+ engine->schedule(rq, prio, 0);
rcu_read_unlock();
}
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index 594ac5e184fc..59f1ae48f652 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -1133,7 +1133,7 @@ void __i915_request_add(struct i915_request *request, bool flush_caches)
if (!prev || i915_request_completed(prev))
priority |= I915_PRIORITY_NEWCLIENT;
- engine->schedule(request, priority);
+ engine->schedule(request, priority, 0);
}
rcu_read_unlock();
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 7ba9119ada54..d1a5bb52ca85 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1110,17 +1110,19 @@ static void queue_request(struct intel_engine_cs *engine,
list_add_tail(&pt->link, &lookup_priolist(engine, pt, prio)->requests);
}
-static void __submit_queue(struct intel_engine_cs *engine, int prio)
+static void __submit_queue(struct intel_engine_cs *engine,
+ int prio, unsigned int timeout)
{
engine->execlists.queue_priority = prio;
- engine->execlists.queue_preempt_timeout = 0;
+ engine->execlists.queue_preempt_timeout = timeout;
tasklet_hi_schedule(&engine->execlists.tasklet);
}
-static void submit_queue(struct intel_engine_cs *engine, int prio)
+static void submit_queue(struct intel_engine_cs *engine,
+ int prio, unsigned int timeout)
{
if (prio > engine->execlists.queue_priority)
- __submit_queue(engine, prio);
+ __submit_queue(engine, prio, timeout);
}
static void execlists_submit_request(struct i915_request *request)
@@ -1132,7 +1134,7 @@ static void execlists_submit_request(struct i915_request *request)
spin_lock_irqsave(&engine->timeline.lock, flags);
queue_request(engine, &request->priotree, rq_prio(request));
- submit_queue(engine, rq_prio(request));
+ submit_queue(engine, rq_prio(request), 0);
GEM_BUG_ON(RB_EMPTY_ROOT(&engine->execlists.queue.rb_root));
GEM_BUG_ON(list_empty(&request->priotree.link));
@@ -1160,7 +1162,8 @@ pt_lock_engine(struct i915_priotree *pt, struct intel_engine_cs *locked)
return engine;
}
-static void execlists_schedule(struct i915_request *request, int prio)
+static void execlists_schedule(struct i915_request *request,
+ int prio, unsigned int timeout)
{
struct intel_engine_cs *engine;
struct i915_dependency *dep, *p;
@@ -1262,7 +1265,7 @@ static void execlists_schedule(struct i915_request *request, int prio)
container_of(pt, typeof(*rq), priotree);
if (i915_sw_fence_done(&rq->submit))
- __submit_queue(engine, prio);
+ __submit_queue(engine, prio, timeout);
}
}
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index c88de28a01a7..ee6cff9cb927 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -462,13 +462,15 @@ struct intel_engine_cs {
*/
void (*submit_request)(struct i915_request *rq);
- /* Call when the priority on a request has changed and it and its
+ /*
+ * Call when the priority on a request has changed and it and its
* dependencies may need rescheduling. Note the request itself may
* not be ready to run!
*
* Called under the struct_mutex.
*/
- void (*schedule)(struct i915_request *request, int priority);
+ void (*schedule)(struct i915_request *request,
+ int priority, unsigned int timeout);
/*
* Cancel all requests on the hardware, or queued for execution.
--
2.16.3
More information about the Intel-gfx-trybot
mailing list