[Intel-gfx] [PATCH 4/6] drm/i915/scheduler: Execute requests in order of priorities

Chris Wilson chris at chris-wilson.co.uk
Thu Oct 27 07:45:49 UTC 2016


On Thu, Oct 27, 2016 at 01:03:46AM +0100, Chris Wilson wrote:
>  	spin_lock(&engine->execlist_lock);
> -	list_for_each_entry(cursor, &engine->execlist_queue, execlist_link) {
> +	rb = engine->execlist_first;
> +	while (rb) {
> +		struct drm_i915_gem_request *cursor =
> +			rb_entry(rb, typeof(*cursor), priotree.node);
> +
>  		/* Can we combine this request with the current port? It has to
>  		 * be the same context/ringbuffer and not have any exceptions
>  		 * (e.g. GVT saying never to combine contexts).
> @@ -501,15 +506,17 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
>  			i915_gem_request_assign(&port->request, last);
>  			port++;
>  		}
> +
> +		rb = rb_next(rb);
> +		rb_erase(&cursor->priotree.node, &engine->execlist_queue);
> +		RB_CLEAR_NODE(&cursor->priotree.node);

Whoopsie, forgot to maintain the retirement order of the timeline...
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list