[Mesa-dev] [PATCH 15/15] radv: dump the list of enabled options when a hang occured

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Tue Sep 12 18:18:17 UTC 2017


Okay, if you fix the few comments I sent, this series is

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Tue, Sep 12, 2017 at 12:35 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Useful to know which debug/perftest options were enabled when
> a hang report is generated.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/amd/vulkan/radv_debug.c   | 25 +++++++++++++++++++++++++
>  src/amd/vulkan/radv_device.c  | 14 ++++++++++++++
>  src/amd/vulkan/radv_private.h |  7 +++++++
>  3 files changed, 46 insertions(+)
>
> diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
> index 106c6e4f64..812e868c10 100644
> --- a/src/amd/vulkan/radv_debug.c
> +++ b/src/amd/vulkan/radv_debug.c
> @@ -553,6 +553,30 @@ radv_dump_dmesg(FILE *f)
>         pclose(p);
>  }
>
> +static void
> +radv_dump_enabled_options(struct radv_device *device, FILE *f)
> +{
> +       uint64_t mask;
> +
> +       fprintf(f, "Enabled debug options: ");
> +
> +       mask = device->debug_flags;
> +       while (mask) {
> +               int i = u_bit_scan64(&mask);
> +               fprintf(f, "%s, ", radv_get_debug_option_name(i));
> +       }
> +       fprintf(f, "\n");
> +
> +       fprintf(f, "Enabled perftest options: ");
> +
> +       mask = device->instance->perftest_flags;
> +       while (mask) {
> +               int i = u_bit_scan64(&mask);
> +               fprintf(f, "%s, ", radv_get_perftest_option_name(i));
> +       }
> +       fprintf(f, "\n");
> +}
> +
>  static bool
>  radv_gpu_hang_occured(struct radv_queue *queue, enum ring_type ring)
>  {
> @@ -585,6 +609,7 @@ radv_check_gpu_hangs(struct radv_queue *queue, struct radeon_winsys_cs *cs)
>         graphics_pipeline = radv_get_saved_graphics_pipeline(device);
>         compute_pipeline = radv_get_saved_compute_pipeline(device);
>
> +       radv_dump_enabled_options(device, stderr);
>         radv_dump_dmesg(stderr);
>
>         if (vm_fault_occurred) {
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 5101bd7cb2..58e6815124 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -417,12 +417,26 @@ static const struct debug_control radv_debug_options[] = {
>         {NULL, 0}
>  };
>
> +const char *
> +radv_get_debug_option_name(int id)
> +{
> +       assert(id < ARRAY_SIZE(radv_debug_options) - 1);
> +       return radv_debug_options[id].string;
> +}
> +
>  static const struct debug_control radv_perftest_options[] = {
>         {"nobatchchain", RADV_PERFTEST_NO_BATCHCHAIN},
>         {"sisched", RADV_PERFTEST_SISCHED},
>         {NULL, 0}
>  };
>
> +const char *
> +radv_get_perftest_option_name(int id)
> +{
> +       assert(id < ARRAY_SIZE(radv_debug_options) - 1);
> +       return radv_perftest_options[id].string;
> +}
> +
>  VkResult radv_CreateInstance(
>         const VkInstanceCreateInfo*                 pCreateInfo,
>         const VkAllocationCallbacks*                pAllocator,
> diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
> index 31991a314c..191a81f77a 100644
> --- a/src/amd/vulkan/radv_private.h
> +++ b/src/amd/vulkan/radv_private.h
> @@ -744,6 +744,13 @@ extern const struct radv_dynamic_state default_dynamic_state;
>  void radv_dynamic_state_copy(struct radv_dynamic_state *dest,
>                              const struct radv_dynamic_state *src,
>                              uint32_t copy_mask);
> +
> +const char *
> +radv_get_debug_option_name(int id);
> +
> +const char *
> +radv_get_perftest_option_name(int id);
> +
>  /**
>   * Attachment state when recording a renderpass instance.
>   *
> --
> 2.14.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list