public inbox for intel-gfx@lists.freedesktop.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, tvrtko.ursulin@linux.intel.com,
	kevin.tian@intel.com, zhiyuan.lv@intel.com,
	chris@chris-wilson.co.uk, daniel.vetter@ffwll.ch
Subject: Re: [PATCH v6 9/9] drm/i915: Introduce GVT context creation API
Date: Fri, 03 Jun 2016 12:59:02 +0300	[thread overview]
Message-ID: <1464947942.7292.45.camel@linux.intel.com> (raw)
In-Reply-To: <1464885380-7056-10-git-send-email-zhi.a.wang@intel.com>

On to, 2016-06-02 at 12:36 -0400, Zhi Wang wrote:
> GVT workload scheduler needs special host LRC contexts, the so called
> "shadow LRC context" to submit guest workload to host i915. During the
> guest workload submission, GVT fills the shadow LRC context with the
> content of guest LRC context: engine context is copied without changes,
> ring context is mostly owned by host i915.
> 
> The GVT-g workload scheduler flow:
> 
>          +-----------+                   +-----------+
>          | GVT Guest |                   | GVT Guest |
>          +-+-----^---+                   +-+-----^---+
>            |     |                         |     |
>            |     | GVT-g                   |     | GVT-g
> vELSP write|     | emulates     vELSP write|     | emulates
>            |     | Execlist/CSB            |     | Execlist/CSB
>            |     | Status                  |     | Status
>            |     |                         |     |
>     +------v-----+-------------------------v-----+---------+
>     |           GVT Virtual Execlist Submission            |
>     +------+-------------------------------+---------------+
>            |                               |
>            | Per-VM/Ring Workoad Q         | Per-VM/Ring Workload Q
>    +---------------------+--+      +------------------------+
>        +---v--------+    ^             +---v--------+
>        |GVT Workload|... |             |GVT Workload|...
>        +------------+    |             +------------+
>                          |
>                          | Pick Workload from Q
>     +--------------------+---------------------------------+
>     |                GVT Workload Scheduler                |
>     +--------------------+---------------------------------+
>                          |         * Shadow guest LRC context
>                   +------v------+  * Shadow guest ring buffer
>                   | GVT Context |  * Scan/Patch guest RB instructions
>                   +------+------+
>                          |
>                          v
>               Host i915 GEM Submission
> 

This kind of graph should also go to some kerneldoc!

Should the picture be updated to reflect that there is GVT context per
guest context? CC'ing Daniel to comment on.

Regards, Joonas

> v6:
> 
> - Make GVT code as dead code when !CONFIG_DRM_I915_GVT. (Chris)
> 
> v5:
> - Only compile this feature when CONFIG_DRM_I915_GVT is enabled. (Tvrtko)
> - Rebase the code into new repo.
> - Add a comment about the ring buffer size. (Joonas)
> 
> v2:
> 
> Mostly based on Daniel's idea. Call the refactored core logic of GEM
> context creation service and LRC context creation service to create the GVT
> context.
> 
> Signed-off-by: Zhi Wang <zhi.a.wang@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_context.c | 32 ++++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index d9d7779..c0259d7 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -342,6 +342,38 @@ i915_gem_create_context(struct drm_device *dev,
>  	return ctx;
>  }
>  
> +/**
> + * i915_gem_create_gvt_context - create a GVT GEM context
> + * @dev: drm device *
> + *
> + * This function is used to create a GVT specific GEM context.
> + *
> + * Returns:
> + * pointer to i915_gem_context on success, error pointer if failed
> + *
> + */
> +struct i915_gem_context *
> +i915_gem_create_gvt_context(struct drm_device *dev)
> +{
> +	struct i915_gem_context *ctx;
> +
> +	if (!IS_ENABLED(CONFIG_DRM_I915_GVT))
> +		return ERR_PTR(-ENODEV);
> +
> +	mutex_lock(&dev->struct_mutex);
> +
> +	ctx = i915_gem_create_context(dev, NULL);
> +	if (IS_ERR(ctx))
> +		goto out;
> +
> +	ctx->enable_lrc_status_change_notification = true;
> +	ctx->enable_lrc_single_submission = true;
> +	ctx->lrc_ring_buffer_size = 512 * PAGE_SIZE; /* Max ring buffer size */
> +out:
> +	mutex_unlock(&dev->struct_mutex);
> +	return ctx;
> +}
> +
>  static void i915_gem_context_unpin(struct i915_gem_context *ctx,
>  				   struct intel_engine_cs *engine)
>  {
-- 
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-03  9:59 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-02 16:36 [PATCH v6 0/9] Introduce the implementation of GVT context Zhi Wang
2016-06-02 16:36 ` [PATCH v6 1/9] drm/i915: Factor out i915_pvinfo.h Zhi Wang
2016-06-03  8:45   ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 2/9] drm/i915: Fold vGPU active check into inner functions Zhi Wang
2016-06-03  8:49   ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 3/9] drm/i915: gvt: Introduce the basic architecture of GVT-g Zhi Wang
2016-06-03  9:14   ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 4/9] drm/i915: Introduce host graphics memory partition for GVT-g Zhi Wang
2016-06-03  9:17   ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 5/9] drm/i915: Make ring buffer size of a LRC context configurable Zhi Wang
2016-06-03  9:20   ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 6/9] drm/i915: Make addressing mode bits in context descriptor configurable Zhi Wang
2016-06-03  9:25   ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 7/9] drm/i915: Introduce execlist context status change notification Zhi Wang
2016-06-03  9:40   ` Joonas Lahtinen
2016-06-07 15:29     ` Wang, Zhi A
2016-06-08  7:49       ` Joonas Lahtinen
2016-06-02 16:36 ` [PATCH v6 8/9] drm/i915: Support LRC context single submission Zhi Wang
2016-06-03  9:47   ` Joonas Lahtinen
2016-06-03 11:25     ` Tian, Kevin
2016-06-07 14:13     ` Wang, Zhi A
2016-06-02 16:36 ` [PATCH v6 9/9] drm/i915: Introduce GVT context creation API Zhi Wang
2016-06-03  9:59   ` Joonas Lahtinen [this message]
2016-06-03  6:43 ` ✗ Ro.CI.BAT: warning for Introduce the implementation of GVT context (rev4) Patchwork

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=1464947942.7292.45.camel@linux.intel.com \
    --to=joonas.lahtinen@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=kevin.tian@intel.com \
    --cc=tvrtko.ursulin@linux.intel.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox