diff --git a/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.h b/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.h --- a/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.h +++ b/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.h @@ -26,6 +26,7 @@ typedef enum cudaError_enum { CUDA_SUCCESS = 0, CUDA_ERROR_INVALID_VALUE = 1, + CUDA_ERROR_INVALID_HANDLE = 400, } CUresult; typedef enum CUstream_flags_enum { diff --git a/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp b/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp --- a/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp +++ b/openmp/libomptarget/plugins/cuda/dynamic_cuda/cuda.cpp @@ -93,7 +93,7 @@ // Note: Called exactly once from cuda rtl.cpp in a global constructor so // does not need to handle being called repeatedly or concurrently if (!checkForCUDA()) { - return CUDA_ERROR_INVALID_VALUE; + return CUDA_ERROR_INVALID_HANDLE; } return dlwrap_cuInit(X); } diff --git a/openmp/libomptarget/plugins/cuda/src/rtl.cpp b/openmp/libomptarget/plugins/cuda/src/rtl.cpp --- a/openmp/libomptarget/plugins/cuda/src/rtl.cpp +++ b/openmp/libomptarget/plugins/cuda/src/rtl.cpp @@ -401,6 +401,11 @@ DP("Start initializing CUDA\n"); CUresult Err = cuInit(0); + if (Err == CUDA_ERROR_INVALID_HANDLE) { + // Can't call cuGetErrorString if dlsym failed + DP("Failed to load CUDA shared library\n"); + return; + } if (!checkResult(Err, "Error returned from cuInit\n")) { return; }