drm/i915: Store the execution priority on the context
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 14 Nov 2016 20:41:04 +0000 (20:41 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 14 Nov 2016 21:01:22 +0000 (21:01 +0000)
In order to support userspace defining different levels of importance to
different contexts, and in particular the preferred order of execution,
store a priority value on each context. By default, the kernel's
context, which is used for idling and other background tasks, is given
minimum priority (i.e. all user contexts will execute before the kernel).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161114204105.29171-9-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem_context.c
drivers/gpu/drm/i915/i915_gem_request.c

index 00a0c6c2515a50801b1b5860a80e0b132b2ee401..0e7e33b73d096af4dec29c693168493c2b415b50 100644 (file)
@@ -936,6 +936,7 @@ struct i915_gem_context {
        /* Unique identifier for this context, used by the hw for tracking */
        unsigned int hw_id;
        u32 user_handle;
+       int priority; /* greater priorities are serviced first */
 
        u32 ggtt_alignment;
 
index 6dd475735f0ac549414dd4da4422415f0562436a..1f94b8d6d83dda81d058c25e3c055721768b7cce 100644 (file)
@@ -476,6 +476,7 @@ int i915_gem_context_init(struct drm_device *dev)
                return PTR_ERR(ctx);
        }
 
+       ctx->priority = I915_PRIORITY_MIN; /* lowest priority; idle task */
        dev_priv->kernel_context = ctx;
 
        DRM_DEBUG_DRIVER("%s context support initialized\n",
index 13574a1e29b1a8e8ec17649a94294260af23b972..b9b5253cf3cd4fb6ebf4b4900cb07f8912c2b151 100644 (file)
@@ -867,7 +867,7 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
         * run at the earliest possible convenience.
         */
        if (engine->schedule)
-               engine->schedule(request, 0);
+               engine->schedule(request, request->ctx->priority);
 
        local_bh_disable();
        i915_sw_fence_commit(&request->submit);