From 84135d4f498716bfa4fefeda556201bc85072bd0 Mon Sep 17 00:00:00 2001 From: Lancelot Six Date: Fri, 16 Aug 2024 15:25:22 +0000 Subject: [PATCH] coredump: Print diagnostic in stderr when errors are detected This patch adds output (to stderr) to indicate step in the core dump creation failed to improve debuggability. Change-Id: I349692e278c2d744136d7fba7f7c2e5a7ada0c06 Signed-off-by: David Yat Sin [ROCm/ROCR-Runtime commit: 3646064a0ed5d00da82d7e58d14e61e42e705746] --- .../libamdhsacode/amd_core_dump.cpp | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/projects/rocr-runtime/runtime/hsa-runtime/libamdhsacode/amd_core_dump.cpp b/projects/rocr-runtime/runtime/hsa-runtime/libamdhsacode/amd_core_dump.cpp index d284223332..873d637b77 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/libamdhsacode/amd_core_dump.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/libamdhsacode/amd_core_dump.cpp @@ -118,10 +118,17 @@ struct NoteSegmentBuilder : public SegmentBuilder { uint32_t runtime_size, agents_size, queue_size, n_entries, entry_size; HsaVersionInfo versionInfo = {0}; - if (hsaKmtDbgEnable(&runtime_ptr, &runtime_size)) return HSA_STATUS_ERROR; + if (hsaKmtDbgEnable(&runtime_ptr, &runtime_size)) { + fprintf(stderr, "Failed to enable debug interface, " + "debugger might be already attached.\n"); + return HSA_STATUS_ERROR; + } std::unique_ptr runtime_info(runtime_ptr, std::free); - if (hsaKmtGetVersion(&versionInfo)) return HSA_STATUS_ERROR; + if (hsaKmtGetVersion(&versionInfo)) { + fprintf(stderr, "Failed to fetch driver ABI version.\n"); + return HSA_STATUS_ERROR; + } /* Note version */ note_package_builder_.Write(1); /* Store version_major in PT_NOTE package */ @@ -131,8 +138,10 @@ struct NoteSegmentBuilder : public SegmentBuilder { /* Store runtime_info_size in PT_NOTE package */ note_package_builder_.Write(runtime_size); - if (hsaKmtDbgGetDeviceData(&agents_ptr, &n_entries, &entry_size)) + if (hsaKmtDbgGetDeviceData(&agents_ptr, &n_entries, &entry_size)) { + fprintf(stderr, "Failed to fetch agents snapshot.\n"); return HSA_STATUS_ERROR; + } agents_size = n_entries * entry_size; std::unique_ptr agents_info(agents_ptr, std::free); /* Store n_agents in PT_NOTE package */ @@ -140,8 +149,10 @@ struct NoteSegmentBuilder : public SegmentBuilder { /* Store agent_info_entry_size in PT_NOTE package */ note_package_builder_.Write(entry_size); - if (hsaKmtDbgGetQueueData(&queues_ptr, &n_entries, &entry_size, true)) + if (hsaKmtDbgGetQueueData(&queues_ptr, &n_entries, &entry_size, true)) { + fprintf(stderr, "Failed to fetch queues snapshot.\n"); return HSA_STATUS_ERROR; + } queue_size = n_entries * entry_size; std::unique_ptr queues_info(queues_ptr, std::free); /* Store n_queues in PT_NOTE package */ @@ -152,7 +163,10 @@ struct NoteSegmentBuilder : public SegmentBuilder { PushInfo(runtime_info.get(), runtime_size); PushInfo(agents_info.get(), agents_size); PushInfo(queues_info.get(), queue_size); - if (hsaKmtDbgDisable()) return HSA_STATUS_ERROR; + if (hsaKmtDbgDisable()) { + fprintf(stderr, "Failed to disable debug interface.\n"); + return HSA_STATUS_ERROR; + } /* With note content, package this in the PT_NOTE. */ PackageBuilder noteHeaderBuilder; @@ -162,10 +176,11 @@ struct NoteSegmentBuilder : public SegmentBuilder { noteHeaderBuilder.Write ("AMDGPU\0"); raw_.resize(noteHeaderBuilder.Size() + note_package_builder_.Size()); - if (!noteHeaderBuilder.GetBuffer(raw_.data())) - return HSA_STATUS_ERROR; - if (!note_package_builder_.GetBuffer(&raw_[noteHeaderBuilder.Size()])) + if (!(noteHeaderBuilder.GetBuffer(raw_.data()) + && note_package_builder_.GetBuffer(&raw_[noteHeaderBuilder.Size()]))) { + fprintf(stderr, "Failed to build the NT_AMDGPU_CORE_STATE note.\n"); return HSA_STATUS_ERROR; + } SegmentInfo s; s.stype = NOTE;