[Intel-gfx] [RFCv3 12/15] drm/i915: Support context single submission

Chris Wilson chris at chris-wilson.co.uk
Fri Mar 11 11:25:39 UTC 2016


On Fri, Mar 11, 2016 at 06:59:43PM +0800, Zhi Wang wrote:
> This patch introduces the support of context signle submission. As GVT
> context may come from different guests, which requires different
> configuration of render registers. It can't be combined in a dual ELSP
> submission combo.

That sounds wrong since the register are part of the context. I presume
what you mean is that you cannot combine requests from the same GVT
context but different guests.

> We make this function as a context feature in context creation service.
> Only GVT-g will create this kinds of GEM context currently.
> 
> Signed-off-by: Zhi Wang <zhi.a.wang at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h  |  1 +
>  drivers/gpu/drm/i915/intel_lrc.c | 10 +++++++++-
>  drivers/gpu/drm/i915/intel_lrc.h |  1 +
>  3 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 68b821a..d7fc738 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -895,6 +895,7 @@ struct intel_context {
>  		bool need_status_change_notification;
>  		struct atomic_notifier_head status_notifier_head;
>  	} engine[I915_NUM_RINGS];
> +	bool single_submission;
>  
>  	struct list_head link;
>  };
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index ae1ab92..3a047fe 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -472,6 +472,9 @@ static void execlists_context_unqueue(struct intel_engine_cs *ring)
>  				 execlist_link) {
>  		if (!req0) {
>  			req0 = cursor;
> +			/* req0 ctx requires single submission, stop picking */
> +			if (req0->ctx->single_submission)
> +				break;
>  		} else if (req0->ctx == cursor->ctx) {
>  			/* Same ctx: ignore first request, as second request
>  			 * will update tail past first request's workload */
> @@ -480,7 +483,12 @@ static void execlists_context_unqueue(struct intel_engine_cs *ring)
>  				       &ring->execlist_retired_req_list);
>  			req0 = cursor;
>  		} else {
> -			req1 = cursor;
> +			/*
> +			 * req0 ctx doesn't require single submission, but
> +			 * next req ctx requires, stop picking req1
> +			 */
> +			if (!cursor->ctx->single_submission)
> +				req1 = cursor;
>  			break;
>  		}
>  	}
> diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
> index 15791d4..4873dd8 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.h
> +++ b/drivers/gpu/drm/i915/intel_lrc.h
> @@ -107,6 +107,7 @@ struct intel_lr_context_alloc_params {
>  	u32 ringbuffer_size;
>  	bool ctx_needs_init;
>  	bool ctx_needs_status_change_notification;
> +	bool ctx_needs_single_submission;

Random garbage.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list