drm/i915: Priority boost for waiting clients
Latency is in the eye of the beholder. In the case where a client stops and waits for the gpu, give that request chain a small priority boost (not so that it overtakes higher priority clients, to preserve the external ordering) so that ideally the wait completes earlier. v2: Tvrtko recommends to keep the boost-from-user-stall as small as possible and to allow new client flows to be preferred for interactivity over stalls. Testcase: igt/gem_sync/switch-default Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Dmitry Rogozhkin <dmitry.v.rogozhkin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181001144755.7978-3-chris@chris-wilson.co.uk
这个提交包含在:
@@ -24,13 +24,14 @@ enum {
|
||||
I915_PRIORITY_INVALID = INT_MIN
|
||||
};
|
||||
|
||||
#define I915_USER_PRIORITY_SHIFT 1
|
||||
#define I915_USER_PRIORITY_SHIFT 2
|
||||
#define I915_USER_PRIORITY(x) ((x) << I915_USER_PRIORITY_SHIFT)
|
||||
|
||||
#define I915_PRIORITY_COUNT BIT(I915_USER_PRIORITY_SHIFT)
|
||||
#define I915_PRIORITY_MASK (I915_PRIORITY_COUNT - 1)
|
||||
|
||||
#define I915_PRIORITY_NEWCLIENT ((u8)BIT(0))
|
||||
#define I915_PRIORITY_WAIT ((u8)BIT(0))
|
||||
#define I915_PRIORITY_NEWCLIENT ((u8)BIT(1))
|
||||
|
||||
struct i915_sched_attr {
|
||||
/**
|
||||
@@ -99,6 +100,8 @@ void i915_sched_node_fini(struct drm_i915_private *i915,
|
||||
void i915_schedule(struct i915_request *request,
|
||||
const struct i915_sched_attr *attr);
|
||||
|
||||
void i915_schedule_bump_priority(struct i915_request *rq, unsigned int bump);
|
||||
|
||||
struct list_head *
|
||||
i915_sched_lookup_priolist(struct intel_engine_cs *engine, int prio);
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户