From: Daniel Vetter <daniel@ffwll.ch>
To: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: Re: [PATCH 6/7] drm/i915: Only track real ppgtt for a context
Date: Wed, 30 Jul 2014 23:11:27 +0200 [thread overview]
Message-ID: <20140730211126.GD8727@phenom.ffwll.local> (raw)
In-Reply-To: <1406749324-2156-6-git-send-email-daniel.vetter@ffwll.ch>
On Wed, Jul 30, 2014 at 09:42:03PM +0200, Daniel Vetter wrote:
> There's a bit a confusion since we track the global gtt,
> the aliasing and real ppgtt in the ctx->vm pointer. And not
> all callers really bother to check for the different cases and just
> presume that it points to a real ppgtt.
>
> Now looking closely we don't actually need ->vm to always point at an
> address space - the only place that cares actually has fixup code
> already to decide whether to look at the per-proces or the global
> address space.
>
> So switch to just tracking the ppgtt directly and ditch all the
> extraneous code.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Jesse looked up the Jira for this one for me, so
OTC-Jira: VIZ-3724
Cheers, Daniel
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 2 +-
> drivers/gpu/drm/i915/i915_drv.h | 3 +--
> drivers/gpu/drm/i915/i915_gem_context.c | 28 +++++++---------------------
> drivers/gpu/drm/i915/i915_gem_execbuffer.c | 5 +++--
> drivers/gpu/drm/i915/i915_gpu_error.c | 10 +++++++---
> 5 files changed, 19 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 3bf1d20c598b..aaf07e230cb0 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -1774,7 +1774,7 @@ static int per_file_ctx(int id, void *ptr, void *data)
> {
> struct intel_context *ctx = ptr;
> struct seq_file *m = data;
> - struct i915_hw_ppgtt *ppgtt = ctx_to_ppgtt(ctx);
> + struct i915_hw_ppgtt *ppgtt = ctx->ppgtt;
>
> if (i915_gem_context_is_default(ctx))
> seq_puts(m, " default context:\n");
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 0762e19f9bc6..3230b08aff13 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -616,7 +616,7 @@ struct intel_context {
> uint8_t remap_slice;
> struct drm_i915_file_private *file_priv;
> struct i915_ctx_hang_stats hang_stats;
> - struct i915_address_space *vm;
> + struct i915_hw_ppgtt *ppgtt;
>
> struct {
> struct drm_i915_gem_object *rcs_state;
> @@ -2504,7 +2504,6 @@ i915_gem_object_ggtt_unbind(struct drm_i915_gem_object *obj)
> void i915_gem_object_ggtt_unpin(struct drm_i915_gem_object *obj);
>
> /* i915_gem_context.c */
> -#define ctx_to_ppgtt(ctx) container_of((ctx)->vm, struct i915_hw_ppgtt, base)
> int __must_check i915_gem_context_init(struct drm_device *dev);
> void i915_gem_context_fini(struct drm_device *dev);
> void i915_gem_context_reset(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index 7a455fcee3a7..c00e5d027774 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -136,15 +136,8 @@ void i915_gem_context_free(struct kref *ctx_ref)
> {
> struct intel_context *ctx = container_of(ctx_ref,
> typeof(*ctx), ref);
> - struct i915_hw_ppgtt *ppgtt = NULL;
>
> - if (ctx->legacy_hw_ctx.rcs_state) {
> - /* We refcount even the aliasing PPGTT to keep the code symmetric */
> - if (USES_PPGTT(ctx->legacy_hw_ctx.rcs_state->base.dev))
> - ppgtt = ctx_to_ppgtt(ctx);
> - }
> -
> - i915_ppgtt_put(ppgtt);
> + i915_ppgtt_put(ctx->ppgtt);
> if (ctx->legacy_hw_ctx.rcs_state)
> drm_gem_object_unreference(&ctx->legacy_hw_ctx.rcs_state->base);
> list_del(&ctx->link);
> @@ -240,7 +233,6 @@ i915_gem_create_context(struct drm_device *dev,
> bool create_vm)
> {
> const bool is_global_default_ctx = file_priv == NULL;
> - struct drm_i915_private *dev_priv = dev->dev_private;
> struct intel_context *ctx;
> int ret = 0;
>
> @@ -274,15 +266,10 @@ i915_gem_create_context(struct drm_device *dev,
> PTR_ERR(ppgtt));
> ret = PTR_ERR(ppgtt);
> goto err_unpin;
> - } else
> - ctx->vm = &ppgtt->base;
> - } else if (USES_PPGTT(dev)) {
> - /* For platforms which only have aliasing PPGTT, we fake the
> - * address space and refcounting. */
> - ctx->vm = &dev_priv->mm.aliasing_ppgtt->base;
> - i915_ppgtt_get(dev_priv->mm.aliasing_ppgtt);
> - } else
> - ctx->vm = &dev_priv->gtt.base;
> + }
> +
> + ctx->ppgtt = ppgtt;
> + }
>
> return ctx;
>
> @@ -538,7 +525,6 @@ static int do_switch(struct intel_engine_cs *ring,
> {
> struct drm_i915_private *dev_priv = ring->dev->dev_private;
> struct intel_context *from = ring->last_context;
> - struct i915_hw_ppgtt *ppgtt = ctx_to_ppgtt(to);
> u32 hw_flags = 0;
> bool uninitialized = false;
> int ret, i;
> @@ -566,8 +552,8 @@ static int do_switch(struct intel_engine_cs *ring,
> */
> from = ring->last_context;
>
> - if (USES_FULL_PPGTT(ring->dev)) {
> - ret = ppgtt->switch_mm(ppgtt, ring, false);
> + if (to->ppgtt) {
> + ret = to->ppgtt->switch_mm(to->ppgtt, ring, false);
> if (ret)
> goto unpin_out;
> }
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 60998fc4e5b2..54b3d8c8b228 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -1318,8 +1318,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
>
> i915_gem_context_reference(ctx);
>
> - vm = ctx->vm;
> - if (!USES_FULL_PPGTT(dev))
> + if (ctx->ppgtt)
> + vm = &ctx->ppgtt->base;
> + else
> vm = &dev_priv->gtt.base;
>
> eb = eb_create(args);
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index 0b3f69439451..06072120b15d 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -958,6 +958,12 @@ static void i915_gem_record_rings(struct drm_device *dev,
>
> request = i915_gem_find_active_request(ring);
> if (request) {
> + struct i915_address_space *vm;
> +
> + vm = request->ctx && request->ctx->ppgtt ?
> + &request->ctx->ppgtt->base :
> + &dev_priv->gtt.base;
> +
> /* We need to copy these to an anonymous buffer
> * as the simplest method to avoid being overwritten
> * by userspace.
> @@ -965,9 +971,7 @@ static void i915_gem_record_rings(struct drm_device *dev,
> error->ring[i].batchbuffer =
> i915_error_object_create(dev_priv,
> request->batch_obj,
> - request->ctx ?
> - request->ctx->vm :
> - &dev_priv->gtt.base);
> + vm);
>
> if (HAS_BROKEN_CS_TLB(dev_priv->dev) &&
> ring->scratch.obj)
> --
> 1.9.3
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
next prev parent reply other threads:[~2014-07-30 21:11 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-30 19:41 [PATCH 1/7] drm/i915: Track file_priv, not ctx in the ppgtt structure Daniel Vetter
2014-07-30 19:41 ` [PATCH 2/7] drm/i915: Only refcount ppgtt if it actually is one Daniel Vetter
2014-07-31 6:52 ` Chris Wilson
2014-07-31 7:39 ` Daniel Vetter
2014-07-31 8:18 ` Daniel Vetter
2014-07-30 19:42 ` [PATCH 3/7] drm/i915: Add proper prefix to obj_to_ggtt Daniel Vetter
2014-07-31 11:43 ` Thierry, Michel
2014-07-30 19:42 ` [PATCH 4/7] drm/i915: Allow i915_gem_setup_global_gtt to fail Daniel Vetter
2014-07-31 6:49 ` Chris Wilson
2014-07-30 19:42 ` [PATCH 5/7] drm/i915: Initialize the aliasing ppgtt as part of global gtt Daniel Vetter
2014-07-31 3:46 ` Ben Widawsky
2014-07-31 3:47 ` Ben Widawsky
2014-07-31 3:48 ` Ben Widawsky
2014-07-31 9:10 ` Daniel Vetter
2014-07-31 15:47 ` Thierry, Michel
2014-07-31 16:15 ` Ville Syrjälä
2014-08-01 9:54 ` Thierry, Michel
2014-08-04 15:38 ` Daniel Vetter
2014-08-04 8:17 ` Daniel Vetter
2014-08-04 14:18 ` [PATCH] " Daniel Vetter
2014-08-06 8:18 ` Thierry, Michel
2014-08-06 8:30 ` Daniel Vetter
2014-08-06 8:44 ` Thierry, Michel
2014-08-06 8:46 ` Daniel Vetter
2014-07-30 19:42 ` [PATCH 6/7] drm/i915: Only track real ppgtt for a context Daniel Vetter
2014-07-30 21:11 ` Daniel Vetter [this message]
2014-08-04 14:20 ` [PATCH] " Daniel Vetter
2014-08-04 17:17 ` Thierry, Michel
2014-08-04 17:56 ` Daniel Vetter
2014-07-30 19:42 ` [PATCH 7/7] drm/i915: Drop create_vm argument to i915_gem_create_context Daniel Vetter
2014-07-31 9:33 ` [PATCH 1/7] drm/i915: Track file_priv, not ctx in the ppgtt structure Thierry, Michel
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=20140730211126.GD8727@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=daniel.vetter@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
/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.