All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Zhi Wang <zhi.a.wang@intel.com>, intel-gfx@lists.freedesktop.org
Cc: zhiyuan.lv@intel.com
Subject: Re: [PATCH v9 08/10] drm/i915: Introduce execlist context status change notification
Date: Thu, 09 Jun 2016 13:44:53 +0300	[thread overview]
Message-ID: <1465469093.5198.2.camel@linux.intel.com> (raw)
In-Reply-To: <1465457661-6117-9-git-send-email-zhi.a.wang@intel.com>

On to, 2016-06-09 at 03:34 -0400, Zhi Wang wrote:
> This patch introduces an approach to track the execlist context status
> change.
> 
> GVT-g uses GVT context as the "shadow context". The content inside GVT
> context will be copied back to guest after the context is idle. And GVT-g
> has to know the status of the execlist context.
> 
> This function is configurable when creating a new GEM context. Currently,
> Only GVT-g will create the "status-change-notification" enabled GEM
> context.
> 
> v8:
> 
> - Remove the boolean flag in struct i915_gem_context. (Joonas)
> 
> v7:
> 
> - Remove per-engine ctx status notifiers. Use one status notifier for all
> engines. (Joonas)
> - Add prefix "INTEL_" for related definitions. (Joonas)
> - Refine the comments in execlists_context_status_change(). (Joonas)
> 
> v6:
> 
> - When !CONFIG_DRM_I915_GVT, make GVT code as dead code then compiler
> could automatically eliminate them for us. (Chris)
> - Always initialize the notifier header, so it could be switched on/off
> at runtime. (Chris)
> 
> v5:
> 
> - Only compile this feature when CONFIG_DRM_I915_GVT is enabled.(Tvrtko)
> 
> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> Signed-off-by: Zhi Wang <zhi.a.wang@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h         |  1 +
>  drivers/gpu/drm/i915/i915_gem_context.c |  1 +
>  drivers/gpu/drm/i915/intel_lrc.c        | 22 ++++++++++++++++++++++
>  drivers/gpu/drm/i915/intel_lrc.h        |  5 +++++
>  4 files changed, 29 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index a9e22200..c14eb56 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -880,6 +880,7 @@ struct i915_gem_context {
>  	} engine[I915_NUM_ENGINES];
>  	u32 ring_size;
>  	u32 desc_template;
> +	struct atomic_notifier_head status_notifier;
>  
>  	struct list_head link;
>  
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index e636d85..3c1b83e 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -298,6 +298,7 @@ __create_hw_context(struct drm_device *dev,
>  	ctx->ring_size = 4 * PAGE_SIZE;
>  	ctx->desc_template = GEN8_CTX_ADDRESSING_MODE(dev_priv) <<
>  		GEN8_CTX_ADDRESSING_MODE_SHIFT;
> +	ATOMIC_INIT_NOTIFIER_HEAD(&ctx->status_notifier);
>  
>  	return ctx;
>  
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 2116f86..7f42b15 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -404,6 +404,20 @@ static void execlists_submit_requests(struct drm_i915_gem_request *rq0,
>  	spin_unlock_irq(&dev_priv->uncore.lock);
>  }
>  
> +static inline void execlists_context_status_change(
> +		struct drm_i915_gem_request *rq,
> +		unsigned long status)
> +{
> +	/*
> +	 * Only used when GVT-g is enabled now. When GVT-g is disabled,
> +	 * The compiler should eliminate this function as dead-code.
> +	 */
> +	if (!IS_ENABLED(CONFIG_DRM_I915_GVT))
> +		return;
> +
> +	atomic_notifier_call_chain(&rq->ctx->status_notifier, status, rq);
> +}
> +
>  static void execlists_context_unqueue(struct intel_engine_cs *engine)
>  {
>  	struct drm_i915_gem_request *req0 = NULL, *req1 = NULL;
> @@ -439,6 +453,12 @@ static void execlists_context_unqueue(struct intel_engine_cs *engine)
>  	if (unlikely(!req0))
>  		return;
>  
> +	execlists_context_status_change(req0, INTEL_CONTEXT_SCHEDULE_IN);
> +
> +	if (req1)
> +		execlists_context_status_change(req1,
> +				INTEL_CONTEXT_SCHEDULE_IN);

Indentation is incorrect here. Would it also fit on one line?

> +
>  	if (req0->elsp_submitted & engine->idle_lite_restore_wa) {
>  		/*
>  		 * WaIdleLiteRestore: make sure we never cause a lite restore
> @@ -477,6 +497,8 @@ execlists_check_remove_request(struct intel_engine_cs *engine, u32 ctx_id)
>  	if (--head_req->elsp_submitted > 0)
>  		return 0;
>  
> +	execlists_context_status_change(head_req, INTEL_CONTEXT_SCHEDULE_OUT);
> +
>  	list_del(&head_req->execlist_link);
>  	i915_gem_request_unreference(head_req);
>  
> diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
> index a8db42a..2b8255c 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.h
> +++ b/drivers/gpu/drm/i915/intel_lrc.h
> @@ -57,6 +57,11 @@
>  #define GEN8_CSB_READ_PTR(csb_status) \
>  	(((csb_status) & GEN8_CSB_READ_PTR_MASK) >> 8)
>  
> +enum {
> +	INTEL_CONTEXT_SCHEDULE_IN = 0,
> +	INTEL_CONTEXT_SCHEDULE_OUT,
> +};
> +
>  /* Logical Rings */
>  int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request);
>  int intel_logical_ring_reserve_space(struct drm_i915_gem_request *request);
-- 
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-06-09 10:44 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-09  7:34 [PATCH v9 00/10] Introduce the implementation of GVT context Zhi Wang
2016-06-09  7:34 ` [PATCH v9 01/10] drm/i915: Factor out i915_pvinfo.h Zhi Wang
2016-06-09  7:34 ` [PATCH v9 02/10] drm/i915: Use offsetof() to calculate the offset of members in PVINFO page Zhi Wang
2016-06-09  7:34 ` [PATCH v9 03/10] drm/i915: Fold vGPU active check into inner functions Zhi Wang
2016-06-09  7:34 ` [PATCH v9 04/10] drm/i915: gvt: Introduce the basic architecture of GVT-g Zhi Wang
2016-06-09  7:34 ` [PATCH v9 05/10] drm/i915: Introduce host graphics memory partition for GVT-g Zhi Wang
2016-06-09  7:34 ` [PATCH v9 06/10] drm/i915: Make ring buffer size of a LRC context configurable Zhi Wang
2016-06-09  7:34 ` [PATCH v9 07/10] drm/i915: Make addressing mode bits in context descriptor configurable Zhi Wang
2016-06-09 10:47   ` Joonas Lahtinen
2016-06-09  7:34 ` [PATCH v9 08/10] drm/i915: Introduce execlist context status change notification Zhi Wang
2016-06-09 10:44   ` Joonas Lahtinen [this message]
2016-06-09 10:53     ` Wang, Zhi A
2016-06-09  7:34 ` [PATCH v9 09/10] drm/i915: Support LRC context single submission Zhi Wang
2016-06-09  7:34 ` [PATCH v9 10/10] drm/i915: Introduce GVT context creation API Zhi Wang
2016-06-09  8:01 ` ✗ Ro.CI.BAT: warning for Introduce the implementation of GVT context (rev7) Patchwork
2016-06-09  9:25   ` Wang, Zhi A

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465469093.5198.2.camel@linux.intel.com \
    --to=joonas.lahtinen@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=zhi.a.wang@intel.com \
    --cc=zhiyuan.lv@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.