Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: John.C.Harrison@Intel.com
To: Intel-Xe@Lists.FreeDesktop.Org
Cc: John Harrison <John.C.Harrison@Intel.com>
Subject: [PATCH v6 3/9] drm/xe/guc: Copy GuC log prior to dumping
Date: Thu, 29 Aug 2024 23:23:04 -0700	[thread overview]
Message-ID: <20240830062310.3450387-4-John.C.Harrison@Intel.com> (raw)
In-Reply-To: <20240830062310.3450387-1-John.C.Harrison@Intel.com>

From: John Harrison <John.C.Harrison@Intel.com>

Add an extra stage to the GuC log print to copy the log buffer into
regular host memory first, rather than printing the live GPU buffer
object directly. Doing so helps prevent inconsistencies due to the log
being updated as it is being dumped. It also allows the use of the
ASCII85 helper function for printing the log in a more compact form
than a straight hex dump.

v2: Use %zx instead of %lx for size_t prints.
v3: Replace hexdump code with ascii85 call (review feedback from
Matthew B). Move chunking code into next patch as that reduces the
deltas of both.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
---
 drivers/gpu/drm/xe/xe_guc_log.c | 40 +++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_guc_log.c b/drivers/gpu/drm/xe/xe_guc_log.c
index a37ee3419428..ffd0b4b02d84 100644
--- a/drivers/gpu/drm/xe/xe_guc_log.c
+++ b/drivers/gpu/drm/xe/xe_guc_log.c
@@ -6,9 +6,12 @@
 #include "xe_guc_log.h"
 
 #include <drm/drm_managed.h>
+#include <linux/vmalloc.h>
 
 #include "xe_bo.h"
+#include "xe_devcoredump.h"
 #include "xe_gt.h"
+#include "xe_gt_printk.h"
 #include "xe_map.h"
 #include "xe_module.h"
 
@@ -49,32 +52,35 @@ static size_t guc_log_size(void)
 		CAPTURE_BUFFER_SIZE;
 }
 
+/**
+ * xe_guc_log_print - dump a copy of the GuC log to some useful location
+ * @log: GuC log structure
+ * @p: the printer object to output to
+ */
 void xe_guc_log_print(struct xe_guc_log *log, struct drm_printer *p)
 {
 	struct xe_device *xe = log_to_xe(log);
 	size_t size;
-	int i, j;
+	void *copy;
 
-	xe_assert(xe, log->bo);
+	if (!log->bo) {
+		drm_puts(p, "GuC log buffer not allocated");
+		return;
+	}
 
 	size = log->bo->size;
 
-#define DW_PER_READ		128
-	xe_assert(xe, !(size % (DW_PER_READ * sizeof(u32))));
-	for (i = 0; i < size / sizeof(u32); i += DW_PER_READ) {
-		u32 read[DW_PER_READ];
-
-		xe_map_memcpy_from(xe, read, &log->bo->vmap, i * sizeof(u32),
-				   DW_PER_READ * sizeof(u32));
-#define DW_PER_PRINT		4
-		for (j = 0; j < DW_PER_READ / DW_PER_PRINT; ++j) {
-			u32 *print = read + j * DW_PER_PRINT;
-
-			drm_printf(p, "0x%08x 0x%08x 0x%08x 0x%08x\n",
-				   *(print + 0), *(print + 1),
-				   *(print + 2), *(print + 3));
-		}
+	copy = vmalloc(size);
+	if (!copy) {
+		drm_printf(p, "Failed to allocate %zu", size);
+		return;
 	}
+
+	xe_map_memcpy_from(xe, copy, &log->bo->vmap, 0, size);
+
+	xe_print_blob_ascii85(p, copy, 0, size);
+
+	vfree(copy);
 }
 
 int xe_guc_log_init(struct xe_guc_log *log)
-- 
2.46.0


  parent reply	other threads:[~2024-08-30  6:23 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-30  6:23 [PATCH v6 0/9] drm/xe/guc: Improve GuC log dumping and add to devcoredump John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 1/9] drm/xe/guc: Remove spurious line feed in debug print John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 2/9] drm/xe: Add ASCII85 dump helper function John.C.Harrison
2024-08-30 17:29   ` John Harrison
2024-08-30 17:31     ` John Harrison
2024-08-30 21:56   ` Matthew Brost
2024-08-30 23:33     ` John Harrison
2024-08-31  1:18       ` John Harrison
2024-08-30  6:23 ` John.C.Harrison [this message]
2024-08-30  6:23 ` [PATCH v6 4/9] drm/xe/guc: Use a two stage dump for GuC logs and add more info John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 5/9] drm/print: Introduce drm_line_printer John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 6/9] drm/xe/guc: Dead CT helper John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 7/9] drm/xe/guc: Dump entire CTB on errors John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 8/9] drm/xe/guc: Add GuC log to devcoredump captures John.C.Harrison
2024-08-30  6:23 ` [PATCH v6 9/9] drm/xe/guc: Add a helper function for dumping GuC log to dmesg John.C.Harrison
2024-08-30  6:59 ` ✓ CI.Patch_applied: success for drm/xe/guc: Improve GuC log dumping and add to devcoredump Patchwork
2024-08-30  6:59 ` ✗ CI.checkpatch: warning " Patchwork
2024-08-30  7:00 ` ✓ CI.KUnit: success " Patchwork
2024-08-30  7:16 ` ✓ CI.Build: " Patchwork
2024-08-30  7:23 ` ✓ CI.Hooks: " Patchwork
2024-08-30  7:25 ` ✗ CI.checksparse: warning " Patchwork
2024-08-30 19:10 ` ✗ CI.FULL: failure " 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=20240830062310.3450387-4-John.C.Harrison@Intel.com \
    --to=john.c.harrison@intel.com \
    --cc=Intel-Xe@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox