Author: Joseph Huber Date: 2021-02-03T14:25:51-08:00 New Revision: 922e4149d16754b54ce225faa3e769d32937d7ad
URL: https://github.com/llvm/llvm-project/commit/922e4149d16754b54ce225faa3e769d32937d7ad DIFF: https://github.com/llvm/llvm-project/commit/922e4149d16754b54ce225faa3e769d32937d7ad.diff LOG: [OpenMP] Fix seg fault in libomptarget when using Info with multiple threads Summary: One option for the LIBOMPTARGET_INFO environment variable is to print the current status of the device's data mappings. These are a shared resource among threads so this needs to be protected when using multiple streams. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D95786 (cherry picked from commit fda48539988d2a1bdb6395799151e9090312a20b) Added: Modified: openmp/libomptarget/src/interface.cpp openmp/libomptarget/src/private.h Removed: ################################################################################ diff --git a/openmp/libomptarget/src/interface.cpp b/openmp/libomptarget/src/interface.cpp index cf6d36960c75c..01f3715d6bcc8 100644 --- a/openmp/libomptarget/src/interface.cpp +++ b/openmp/libomptarget/src/interface.cpp @@ -58,7 +58,7 @@ static void HandleTargetOutcome(bool success, ident_t *loc = nullptr) { case tgt_mandatory: if (!success) { if (getInfoLevel() & OMP_INFOTYPE_DUMP_TABLE) - for (const auto &Device : PM->Devices) + for (auto &Device : PM->Devices) dumpTargetPointerMappings(loc, Device); else FAILURE_MESSAGE("Run with LIBOMPTARGET_DEBUG=%d to dump host-target " @@ -76,7 +76,7 @@ static void HandleTargetOutcome(bool success, ident_t *loc = nullptr) { 1, "failure of target construct while offloading is mandatory"); } else { if (getInfoLevel() & OMP_INFOTYPE_DUMP_TABLE) - for (const auto &Device : PM->Devices) + for (auto &Device : PM->Devices) dumpTargetPointerMappings(loc, Device); } break; diff --git a/openmp/libomptarget/src/private.h b/openmp/libomptarget/src/private.h index fb6f681d3020c..3b0e57dfe15ed 100644 --- a/openmp/libomptarget/src/private.h +++ b/openmp/libomptarget/src/private.h @@ -99,7 +99,7 @@ int __kmpc_get_target_offload(void) __attribute__((weak)); //////////////////////////////////////////////////////////////////////////////// /// dump a table of all the host-target pointer pairs on failure static inline void dumpTargetPointerMappings(const ident_t *Loc, - const DeviceTy &Device) { + DeviceTy &Device) { if (Device.HostDataToTargetMap.empty()) return; @@ -109,6 +109,7 @@ static inline void dumpTargetPointerMappings(const ident_t *Loc, Kernel.getFilename(), Kernel.getLine(), Kernel.getColumn()); INFO(OMP_INFOTYPE_ALL, Device.DeviceID, "%-18s %-18s %s %s %s\n", "Host Ptr", "Target Ptr", "Size (B)", "RefCount", "Declaration"); + Device.DataMapMtx.lock(); for (const auto &HostTargetMap : Device.HostDataToTargetMap) { SourceInfo Info(HostTargetMap.HstPtrName); INFO(OMP_INFOTYPE_ALL, Device.DeviceID, @@ -118,6 +119,7 @@ static inline void dumpTargetPointerMappings(const ident_t *Loc, HostTargetMap.getRefCount(), Info.getName(), Info.getFilename(), Info.getLine(), Info.getColumn()); } + Device.DataMapMtx.unlock(); } //////////////////////////////////////////////////////////////////////////////// _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits