Module: Mesa
Branch: master
Commit: 33c9d4bf3152cdfff694a1572012631b120b6731
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=33c9d4bf3152cdfff694a1572012631b120b6731

Author: Samuel Pitoiset <[email protected]>
Date:   Mon Oct 19 18:37:26 2020 +0200

radv: replace RADV_TRACE_FILE by RADV_DEBUG=hang

The trace file will be dumped as part of the hang report into
$HOME/radv_dumps_<pid>/trace.log if a GPU hang is detected.

The old and famous RADV_TRACE_FILE envvar is now deprecated.

Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7233>

---

 docs/envvars.rst             |  5 +++--
 src/amd/vulkan/radv_debug.c  | 21 +++++++++------------
 src/amd/vulkan/radv_debug.h  |  1 +
 src/amd/vulkan/radv_device.c | 15 +++++++++++----
 4 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/docs/envvars.rst b/docs/envvars.rst
index b3257462347..672b5657666 100644
--- a/docs/envvars.rst
+++ b/docs/envvars.rst
@@ -554,6 +554,9 @@ RADV driver environment variables
    ``forcecompress``
       Enables DCC,FMASK,CMASK,HTILE in situations where the driver supports it
       but normally does not deem it beneficial.
+   ``hang``
+      enable GPU hangs detection and dump a report to $HOME/radv_dumps_<pid>
+      if a GPU hang is detected
    ``info``
       show GPU-related information
    ``metashaders``
@@ -624,8 +627,6 @@ RADV driver environment variables
 
 ``RADV_TEX_ANISO``
    force anisotropy filter (up to 16)
-``RADV_TRACE_FILE``
-   generate cmdbuffer tracefiles when a GPU hang is detected
 ``ACO_DEBUG``
    a comma-separated list of named flags, which do various things:
 
diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index c5ab5387a80..7f80381df33 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -83,19 +83,10 @@ radv_init_trace(struct radv_device *device)
 }
 
 static void
-radv_dump_trace(struct radv_device *device, struct radeon_cmdbuf *cs)
+radv_dump_trace(struct radv_device *device, struct radeon_cmdbuf *cs, FILE *f)
 {
-       const char *filename = getenv("RADV_TRACE_FILE");
-       FILE *f = fopen(filename, "w");
-
-       if (!f) {
-               fprintf(stderr, "Failed to write trace dump to %s\n", filename);
-               return;
-       }
-
        fprintf(f, "Trace ID: %x\n", *device->trace_id_ptr);
        device->ws->cs_dump(cs, f, (const int*)device->trace_id_ptr, 2);
-       fclose(f);
 }
 
 static void
@@ -625,8 +616,6 @@ radv_check_gpu_hangs(struct radv_queue *queue, struct 
radeon_cmdbuf *cs)
 
        fprintf(stderr, "radv: GPU hang detected...\n");
 
-       radv_dump_trace(queue->device, cs);
-
        /* Create a directory into $HOME/radv_dumps_<pid> to save various
         * debugging info about that GPU hang.
         */
@@ -638,6 +627,14 @@ radv_check_gpu_hangs(struct radv_queue *queue, struct 
radeon_cmdbuf *cs)
                abort();
        }
 
+       /* Dump trace file. */
+       snprintf(dump_path, sizeof(dump_path), "%s/%s", dump_dir, "trace.log");
+       f = fopen(dump_path, "w+");
+       if (f) {
+               radv_dump_trace(queue->device, cs, f);
+               fclose(f);
+       }
+
        /* Dump pipeline state. */
        snprintf(dump_path, sizeof(dump_path), "%s/%s", dump_dir, 
"pipeline.log");
        f = fopen(dump_path, "w+");
diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index 103716493fb..0985be36940 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -57,6 +57,7 @@ enum {
        RADV_DEBUG_DISCARD_TO_DEMOTE = 1 << 26,
        RADV_DEBUG_LLVM              = 1 << 27,
        RADV_DEBUG_FORCE_COMPRESS    = 1 << 28,
+       RADV_DEBUG_HANG              = 1 << 29,
 };
 
 enum {
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index c29006f702d..ce58e994b6e 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -530,6 +530,7 @@ static const struct debug_control radv_debug_options[] = {
        {"discardtodemote", RADV_DEBUG_DISCARD_TO_DEMOTE},
        {"llvm", RADV_DEBUG_LLVM},
        {"forcecompress", RADV_DEBUG_FORCE_COMPRESS},
+       {"hang", RADV_DEBUG_HANG},
        {NULL, 0}
 };
 
@@ -2794,19 +2795,25 @@ VkResult radv_CreateDevice(
                device->physical_device->rad_info.family == CHIP_HAWAII ? 4096 
: 8192;
 
        if (getenv("RADV_TRACE_FILE")) {
-               const char *filename = getenv("RADV_TRACE_FILE");
+               fprintf(stderr, 
"***********************************************************************************\n");
+               fprintf(stderr, "* WARNING: RADV_TRACE_FILE=<file> is 
deprecated and replaced by RADV_DEBUG=hang *\n");
+               fprintf(stderr, 
"***********************************************************************************\n");
+               abort();
+       }
 
+       if (device->instance->debug_flags & RADV_DEBUG_HANG) {
+               /* Enable GPU hangs detection and dump logs if a GPU hang is
+                * detected.
+                */
                keep_shader_info = true;
 
                if (!radv_init_trace(device))
                        goto fail;
 
                fprintf(stderr, 
"*****************************************************************************\n");
-               fprintf(stderr, "* WARNING: RADV_TRACE_FILE is costly and 
should only be used for debugging! *\n");
+               fprintf(stderr, "* WARNING: RADV_DEBUG=hang is costly and 
should only be used for debugging! *\n");
                fprintf(stderr, 
"*****************************************************************************\n");
 
-               fprintf(stderr, "Trace file will be dumped to %s\n", filename);
-
                /* Wait for idle after every draw/dispatch to identify the
                 * first bad call.
                 */

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to