From patchwork Wed Jan 15 19:07:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodrigo Vivi X-Patchwork-Id: 3493461 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 528C5C02DC for ; Wed, 15 Jan 2014 19:08:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 92C3220148 for ; Wed, 15 Jan 2014 19:07:55 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 8442120138 for ; Wed, 15 Jan 2014 19:07:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AD32B10DC2A; Wed, 15 Jan 2014 11:07:52 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-qc0-f179.google.com (mail-qc0-f179.google.com [209.85.216.179]) by gabe.freedesktop.org (Postfix) with ESMTP id EFD1E10DBF6 for ; Wed, 15 Jan 2014 11:07:49 -0800 (PST) Received: by mail-qc0-f179.google.com with SMTP id e16so1356845qcx.38 for ; Wed, 15 Jan 2014 11:07:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dDTlfswzqP8NW/+l3phbF2DDMrBhQf0CHHjKA3q+Zao=; b=Xp1uPgcTpeQR3O4XMbzmXTd3W7Ik/JgmiB8iVY8e7GtPikoG9AhKbLsoqrM3SU+e+d +X6N3HB9Y1smb6nn+NabC3FOIlmxLzLvirHk38bEeUz1MwBqMEgHR8cu0Ou+8b34eBXA GQrT0Pnse+YQwQtblxDBkIIq7jccsOwOiYiBD7wA6uKI8sjxxBcQy3mfRxww+Gu5FHSc NxlwYC3Z5yvomrCjqtantYLd1lJ4LTilXF9zIDdrMJP4QFOPnDdsSxLrec7gHqBZlEeM Zw7j6PY0aN71mZT1vKqsDjFDuS99MUN+pb54crrAt8urTn6mddQdii1I6GyjTRE7OYxc eY2Q== X-Received: by 10.229.171.132 with SMTP id h4mr7687578qcz.21.1389812869673; Wed, 15 Jan 2014 11:07:49 -0800 (PST) Received: from localhost.localdomain ([177.111.47.151]) by mx.google.com with ESMTPSA id r4sm8070898qeu.20.2014.01.15.11.07.47 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Jan 2014 11:07:48 -0800 (PST) From: Rodrigo Vivi To: intel-gfx@lists.freedesktop.org Date: Wed, 15 Jan 2014 17:07:30 -0200 Message-Id: <1389812850-4913-3-git-send-email-rodrigo.vivi@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1389812850-4913-1-git-send-email-rodrigo.vivi@gmail.com> References: <1389812850-4913-1-git-send-email-rodrigo.vivi@gmail.com> Cc: Sedat Dilek Subject: [Intel-gfx] [PATCH 2/2] drm/i915: Dump the contents of the GTT X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Chris Wilson Chasing wild speculation that we may be writing the wrong addresses into the GTT for stolen objects, I would like to inspect those values. Also to aide debugging ENOSPC issues with fragmentation, order the object list by ascending GTT order so that holes are more easily seen. Signed-off-by: Chris Wilson Cc: Sedat Dilek Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/i915/i915_debugfs.c | 72 ++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 74866bf..75a8763 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -435,6 +435,61 @@ static int i915_gem_object_info(struct seq_file *m, void* data) return 0; } +static int i915_gem_gtt_contents(struct seq_file *m, struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + gen6_gtt_pte_t __iomem *gtt_entries; + gen6_gtt_pte_t scratch_pte; + gen6_gtt_pte_t zero[8] = {}; + int i, j, last_zero = 0; + int ret; + + if (INTEL_INFO(dev)->gen < 6) + return 0; + + ret = mutex_lock_interruptible(&dev->struct_mutex); + if (ret) + return ret; + + gtt_entries = (gen6_gtt_pte_t __iomem *)dev_priv->gtt.gsm; + scratch_pte = dev_priv->gtt.base.pte_encode(dev_priv->gtt.base.scratch.addr, I915_CACHE_LLC, true); + for (i = 0; i < gtt_total_entries(dev_priv->gtt); i += 8) { + gen6_gtt_pte_t pte[8]; + int this_zero; + + for (j = 0; j < 8; j++) { + pte[j] = ioread32(>t_entries[i+j]); + if (pte[j] == scratch_pte) + pte[j] = 0; + if ((pte[j] & 1) == 0) + pte[j] = 0; + } + + this_zero = memcmp(pte, zero, sizeof(pte)) == 0; + if (last_zero && this_zero) { + if (last_zero++ == 1) + seq_puts(m, "...\n"); + continue; + } + + seq_printf(m, "[%08x] %08x %08x %08x %08x %08x %08x %08x %08x\n", + i, pte[0], pte[1], pte[2], pte[3], pte[4], pte[5], pte[6], pte[7]); + last_zero = this_zero; + } + + mutex_unlock(&dev->struct_mutex); + + return 0; +} + +static int obj_rank_by_ggtt(void *priv, struct list_head *A, struct list_head *B) +{ + struct drm_i915_gem_object *a = list_entry(A, typeof(*a), obj_exec_link); + struct drm_i915_gem_object *b = list_entry(B, typeof(*b), obj_exec_link); + + return i915_gem_obj_ggtt_offset(a) - i915_gem_obj_ggtt_offset(b); +} + static int i915_gem_gtt_info(struct seq_file *m, void *data) { struct drm_info_node *node = (struct drm_info_node *) m->private; @@ -442,6 +497,7 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data) uintptr_t list = (uintptr_t) node->info_ent->data; struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_gem_object *obj; + struct list_head sorted; size_t total_obj_size, total_gtt_size; int count, ret; @@ -449,11 +505,22 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data) if (ret) return ret; + INIT_LIST_HEAD(&sorted); + total_obj_size = total_gtt_size = count = 0; list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { if (list == PINNED_LIST && !i915_gem_obj_is_pinned(obj)) continue; + list_add(&obj->obj_exec_link, &sorted); + } + + list_sort(NULL, &sorted, obj_rank_by_ggtt); + + while (!list_empty(&sorted)) { + obj = list_first_entry(&sorted, typeof(*obj), obj_exec_link); + list_del_init(&obj->obj_exec_link); + seq_puts(m, " "); describe_obj(m, obj); seq_putc(m, '\n'); @@ -467,7 +534,10 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data) seq_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n", count, total_obj_size, total_gtt_size); - return 0; + if (list == PINNED_LIST) + return 0; + + return i915_gem_gtt_contents(m, dev); } static int i915_gem_pageflip_info(struct seq_file *m, void *data)