mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
drm/i915/execlists: Tweak virtual unsubmission
Since commite2144503bf
("drm/i915: Prevent bonded requests from overtaking each other on preemption") we have restricted requests to run on their chosen engine across preemption events. We can take this restriction into account to know that we will want to resubmit those requests onto the same physical engine, and so can shortcircuit the virtual engine selection process and keep the request on the same engine during unwind. References:e2144503bf
("drm/i915: Prevent bonded requests from overtaking each other on preemption") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Ramlingam C <ramalingam.c@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191013203012.25208-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
9506c23dfa
commit
89b6d1831d
@ -847,7 +847,6 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine)
|
||||
list_for_each_entry_safe_reverse(rq, rn,
|
||||
&engine->active.requests,
|
||||
sched.link) {
|
||||
struct intel_engine_cs *owner;
|
||||
|
||||
if (i915_request_completed(rq))
|
||||
continue; /* XXX */
|
||||
@ -862,8 +861,7 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine)
|
||||
* engine so that it can be moved across onto another physical
|
||||
* engine as load dictates.
|
||||
*/
|
||||
owner = rq->hw_context->engine;
|
||||
if (likely(owner == engine)) {
|
||||
if (likely(rq->execution_mask == engine->mask)) {
|
||||
GEM_BUG_ON(rq_prio(rq) == I915_PRIORITY_INVALID);
|
||||
if (rq_prio(rq) != prio) {
|
||||
prio = rq_prio(rq);
|
||||
@ -874,6 +872,8 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine)
|
||||
list_move(&rq->sched.link, pl);
|
||||
active = rq;
|
||||
} else {
|
||||
struct intel_engine_cs *owner = rq->hw_context->engine;
|
||||
|
||||
/*
|
||||
* Decouple the virtual breadcrumb before moving it
|
||||
* back to the virtual engine -- we don't want the
|
||||
|
@ -649,6 +649,7 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp)
|
||||
rq->gem_context = ce->gem_context;
|
||||
rq->engine = ce->engine;
|
||||
rq->ring = ce->ring;
|
||||
rq->execution_mask = ce->engine->mask;
|
||||
|
||||
rcu_assign_pointer(rq->timeline, tl);
|
||||
rq->hwsp_seqno = tl->hwsp_seqno;
|
||||
@ -671,7 +672,6 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp)
|
||||
rq->batch = NULL;
|
||||
rq->capture_list = NULL;
|
||||
rq->flags = 0;
|
||||
rq->execution_mask = ALL_ENGINES;
|
||||
|
||||
INIT_LIST_HEAD(&rq->execute_cb);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user