From: Daniel Vetter <daniel@ffwll.ch>
To: Thomas Daniel <thomas.daniel@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Don't pin LRC in GGTT when dumping in debugfs
Date: Tue, 2 Dec 2014 15:22:23 +0100 [thread overview]
Message-ID: <20141202142223.GS32117@phenom.ffwll.local> (raw)
In-Reply-To: <1417526478-27010-1-git-send-email-thomas.daniel@intel.com>
On Tue, Dec 02, 2014 at 01:21:18PM +0000, Thomas Daniel wrote:
> LRC object does not need to be mapped into the GGTT when dumping. A side-effect
> of this patch is that a compiler warning goes away (not checking return value
> of i915_gem_obj_ggtt_pin).
>
> v2: Broke out individual context dumping into a new function as the indentation
> was getting a bit crazy. Added notification of contexts with no gem object for
> debugging purposes. Removed unnecessary pin_pages and unpin_pages, replaced
> with explicit get_pages for the context object as there may be no backing store
> allocated at this time (Comment for get_pages says "Ensure that the associated
> pages are gathered from the backing storage and pinned into our object").
> Improved error checking - get_pages and get_page are checked for failure.
The comment that get_pages pins the backing storage is outdated btw -
at every point where the shrinker might kick in (any memory allocation
really) you might loose the backing storage again. Hence why we have the
pin/unpin_pages functions. But like Chris said this isn't actually
required here. Care for a patch to update that comment?
>
> Signed-off-by: Thomas Daniel <thomas.daniel@intel.com>
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 84 ++++++++++++++++++++---------------
> 1 file changed, 49 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 7ea3843..e1de646 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -1773,6 +1773,50 @@ static int i915_context_status(struct seq_file *m, void *unused)
> return 0;
> }
>
> +static void i915_dump_lrc_obj(struct seq_file *m,
> + struct intel_engine_cs *ring,
> + struct drm_i915_gem_object *ctx_obj)
Please align parameter continuation lines to the opening ( since that's
the usual style we use in i915. Not doing that tends to look pretty
jarring. checkpatch --strict will look for these (and a few other things I
tend to ignore, so please use with caution).
> +{
> + struct page *page;
> + uint32_t *reg_state;
> + int j;
> + unsigned long ggtt_offset = 0;
> +
> + if (ctx_obj == NULL) {
> + seq_printf(m, "Context on %s with no gem object\n",
> + ring->name);
> + return;
> + }
> +
> + seq_printf(m, "CONTEXT: %s %u\n", ring->name,
> + intel_execlists_ctx_id(ctx_obj));
> +
> + if (!i915_gem_obj_ggtt_bound(ctx_obj))
> + seq_puts(m, "\tNot bound in GGTT\n");
> + else
> + ggtt_offset = i915_gem_obj_ggtt_offset(ctx_obj);
> +
> + if (i915_gem_object_get_pages(ctx_obj)) {
> + seq_puts(m, "\tFailed to get pages for context object\n");
> + return;
> + }
> +
> + page = i915_gem_object_get_page(ctx_obj, 1);
> + if (!WARN_ON(page == NULL)) {
> + reg_state = kmap_atomic(page);
> +
> + for (j = 0; j < 0x600 / sizeof(u32) / 4; j += 4) {
> + seq_printf(m, "\t[0x%08lx] 0x%08x 0x%08x 0x%08x 0x%08x\n",
> + ggtt_offset + 4096 + (j * 4),
> + reg_state[j], reg_state[j + 1],
> + reg_state[j + 2], reg_state[j + 3]);
> + }
> + kunmap_atomic(reg_state);
> + }
> +
> + seq_putc(m, '\n');
> +}
> +
> static int i915_dump_lrc(struct seq_file *m, void *unused)
> {
> struct drm_info_node *node = (struct drm_info_node *) m->private;
> @@ -1791,41 +1835,11 @@ static int i915_dump_lrc(struct seq_file *m, void *unused)
> if (ret)
> return ret;
>
> - list_for_each_entry(ctx, &dev_priv->context_list, link) {
> - for_each_ring(ring, dev_priv, i) {
> - struct drm_i915_gem_object *ctx_obj = ctx->engine[i].state;
> -
> - if (ring->default_context == ctx)
> - continue;
> -
> - if (ctx_obj) {
> - struct page *page;
> - uint32_t *reg_state;
> - int j;
> -
> - i915_gem_obj_ggtt_pin(ctx_obj,
> - GEN8_LR_CONTEXT_ALIGN, 0);
> -
> - page = i915_gem_object_get_page(ctx_obj, 1);
> - reg_state = kmap_atomic(page);
> -
> - seq_printf(m, "CONTEXT: %s %u\n", ring->name,
> - intel_execlists_ctx_id(ctx_obj));
> -
> - for (j = 0; j < 0x600 / sizeof(u32) / 4; j += 4) {
> - seq_printf(m, "\t[0x%08lx] 0x%08x 0x%08x 0x%08x 0x%08x\n",
> - i915_gem_obj_ggtt_offset(ctx_obj) + 4096 + (j * 4),
> - reg_state[j], reg_state[j + 1],
> - reg_state[j + 2], reg_state[j + 3]);
> - }
> - kunmap_atomic(reg_state);
> -
> - i915_gem_object_ggtt_unpin(ctx_obj);
> -
> - seq_putc(m, '\n');
> - }
> - }
> - }
I've added back some of the braces here for readability of this nested
loops - I got a bit confused ;-)
Queued for -next, thanks for the patch.
-Daniel
> + list_for_each_entry(ctx, &dev_priv->context_list, link)
> + for_each_ring(ring, dev_priv, i)
> + if (ring->default_context != ctx)
> + i915_dump_lrc_obj(m, ring,
> + ctx->engine[i].state);
>
> mutex_unlock(&dev->struct_mutex);
>
> --
> 1.7.9.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2014-12-02 14:21 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-20 11:12 [PATCH] drm/i915: Don't pin LRC in GGTT when dumping in debugfs Thomas Daniel
2014-11-20 11:16 ` Chris Wilson
2014-11-20 11:25 ` Daniel, Thomas
2014-11-20 11:39 ` Daniel Vetter
2014-11-20 11:41 ` Chris Wilson
2014-11-20 12:09 ` Daniel, Thomas
2014-11-20 12:28 ` Chris Wilson
2014-11-20 12:50 ` Daniel Vetter
2014-11-25 14:30 ` Daniel, Thomas
2014-11-25 14:44 ` Chris Wilson
2014-11-25 15:59 ` Daniel Vetter
2014-11-25 16:42 ` Daniel, Thomas
2014-11-25 20:51 ` Chris Wilson
2014-11-26 12:28 ` Daniel Vetter
2014-12-02 13:21 ` Thomas Daniel
2014-12-02 14:22 ` Daniel Vetter [this message]
2014-12-03 1:39 ` shuang.he
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=20141202142223.GS32117@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
--cc=thomas.daniel@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