[libomptarget][cuda] Gracefully handle missing cuda library

[libomptarget][cuda] Gracefully handle missing cuda library

If using dynamic cuda, and it failed to load, it is not safe to call
cuGetErrorString.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D95412
This commit is contained in:
Jon Chesterfield 2021-01-26 02:54:00 +00:00
parent 231a82a150
commit fafd45c01f
3 changed files with 7 additions and 1 deletions

View File

@ -93,7 +93,7 @@ CUresult cuInit(unsigned X) {
// 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);
}

View File

@ -26,6 +26,7 @@ typedef struct CUstream_st *CUstream;
typedef enum cudaError_enum {
CUDA_SUCCESS = 0,
CUDA_ERROR_INVALID_VALUE = 1,
CUDA_ERROR_INVALID_HANDLE = 400,
} CUresult;
typedef enum CUstream_flags_enum {

View File

@ -401,6 +401,11 @@ public:
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;
}