Skip to content

Commit 98a6665

Browse files
committed
fix return codes in CUDA not impl ops
1 parent e9fdb84 commit 98a6665

File tree

2 files changed

+60
-21
lines changed

2 files changed

+60
-21
lines changed

src/provider/provider_cuda.c

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ typedef CUipcMemHandle cu_ipc_data_t;
9696

9797
static cu_ops_t g_cu_ops;
9898
static UTIL_ONCE_FLAG cu_is_initialized = UTIL_ONCE_FLAG_INIT;
99-
static bool Init_cu_global_state_failed;
99+
static bool Init_cu_global_state_failed = true;
100100

101101
// forward decl needed for alloc
102102
static umf_result_t cu_memory_provider_free(void *provider, void *ptr,
@@ -146,7 +146,6 @@ static void init_cu_global_state(void) {
146146
utils_open_library(lib_name, UMF_UTIL_OPEN_LIBRARY_NO_LOAD);
147147
if (!lib_handle) {
148148
LOG_ERR("Failed to open CUDA shared library");
149-
Init_cu_global_state_failed = true;
150149
return;
151150
}
152151

@@ -189,10 +188,13 @@ static void init_cu_global_state(void) {
189188
!g_cu_ops.cuCtxSetCurrent || !g_cu_ops.cuIpcGetMemHandle ||
190189
!g_cu_ops.cuIpcOpenMemHandle || !g_cu_ops.cuIpcCloseMemHandle) {
191190
LOG_FATAL("Required CUDA symbols not found.");
192-
Init_cu_global_state_failed = true;
193191
utils_close_library(lib_handle);
194192
return;
195193
}
194+
195+
// set "failed" flag to false (it is initialized to true)
196+
Init_cu_global_state_failed = false;
197+
196198
cu_lib_handle = lib_handle;
197199
}
198200

@@ -244,6 +246,10 @@ umf_result_t umfCUDAMemoryProviderParamsCreate(
244246

245247
umf_result_t umfCUDAMemoryProviderParamsDestroy(
246248
umf_cuda_memory_provider_params_handle_t hParams) {
249+
if (!hParams) {
250+
LOG_ERR("CUDA Memory Provider params handle is NULL");
251+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
252+
}
247253
umf_ba_global_free(hParams);
248254

249255
return UMF_RESULT_SUCCESS;
@@ -711,49 +717,77 @@ const umf_memory_provider_ops_t *umfCUDAMemoryProviderOps(void) {
711717

712718
umf_result_t umfCUDAMemoryProviderParamsCreate(
713719
umf_cuda_memory_provider_params_handle_t *hParams) {
714-
(void)hParams;
720+
if (!hParams) {
721+
LOG_ERR("CUDA Memory Provider params handle is NULL");
722+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
723+
}
724+
725+
*hParams = NULL;
715726
LOG_ERR("CUDA provider is disabled (UMF_BUILD_CUDA_PROVIDER is OFF)!");
716-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
727+
728+
return UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
717729
}
718730

719731
umf_result_t umfCUDAMemoryProviderParamsDestroy(
720732
umf_cuda_memory_provider_params_handle_t hParams) {
721-
(void)hParams;
733+
if (!hParams) {
734+
LOG_ERR("CUDA Memory Provider params handle is NULL");
735+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
736+
}
737+
722738
LOG_ERR("CUDA provider is disabled (UMF_BUILD_CUDA_PROVIDER is OFF)!");
723-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
739+
return UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
724740
}
725741

726742
umf_result_t umfCUDAMemoryProviderParamsSetContext(
727743
umf_cuda_memory_provider_params_handle_t hParams, void *hContext) {
728-
(void)hParams;
729744
(void)hContext;
745+
746+
if (!hParams) {
747+
LOG_ERR("CUDA Memory Provider params handle is NULL");
748+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
749+
}
750+
730751
LOG_ERR("CUDA provider is disabled (UMF_BUILD_CUDA_PROVIDER is OFF)!");
731-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
752+
return UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
732753
}
733754

734755
umf_result_t umfCUDAMemoryProviderParamsSetDevice(
735756
umf_cuda_memory_provider_params_handle_t hParams, int hDevice) {
736-
(void)hParams;
737757
(void)hDevice;
758+
759+
if (!hParams) {
760+
LOG_ERR("CUDA Memory Provider params handle is NULL");
761+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
762+
}
763+
738764
LOG_ERR("CUDA provider is disabled (UMF_BUILD_CUDA_PROVIDER is OFF)!");
739-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
765+
return UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
740766
}
741767

742768
umf_result_t umfCUDAMemoryProviderParamsSetMemoryType(
743769
umf_cuda_memory_provider_params_handle_t hParams,
744770
umf_usm_memory_type_t memoryType) {
745-
(void)hParams;
746771
(void)memoryType;
772+
if (!hParams) {
773+
LOG_ERR("CUDA Memory Provider params handle is NULL");
774+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
775+
}
776+
747777
LOG_ERR("CUDA provider is disabled (UMF_BUILD_CUDA_PROVIDER is OFF)!");
748-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
778+
return UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
749779
}
750780

751781
umf_result_t umfCUDAMemoryProviderParamsSetAllocFlags(
752782
umf_cuda_memory_provider_params_handle_t hParams, unsigned int flags) {
753-
(void)hParams;
754783
(void)flags;
784+
if (!hParams) {
785+
LOG_ERR("CUDA Memory Provider params handle is NULL");
786+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
787+
}
788+
755789
LOG_ERR("CUDA provider is disabled (UMF_BUILD_CUDA_PROVIDER is OFF)!");
756-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
790+
return UMF_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
757791
}
758792

759793
const umf_memory_provider_ops_t *umfCUDAMemoryProviderOps(void) {

test/providers/provider_cuda_not_impl.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,28 @@ using umf_test::test;
1111
TEST_F(test, cuda_provider_not_implemented) {
1212
umf_cuda_memory_provider_params_handle_t hParams = nullptr;
1313
umf_result_t result = umfCUDAMemoryProviderParamsCreate(&hParams);
14-
ASSERT_EQ(result, UMF_RESULT_ERROR_NOT_SUPPORTED);
14+
ASSERT_NE(result, UMF_RESULT_SUCCESS); // note NE
15+
ASSERT_EQ(hParams, nullptr);
1516

17+
// set hParams to non-null value
18+
hParams = (umf_cuda_memory_provider_params_handle_t)0x1;
19+
20+
// when CUDA is not available, all operations should fail
1621
result = umfCUDAMemoryProviderParamsDestroy(hParams);
17-
ASSERT_EQ(result, UMF_RESULT_ERROR_NOT_SUPPORTED);
22+
ASSERT_NE(result, UMF_RESULT_SUCCESS);
1823

1924
result = umfCUDAMemoryProviderParamsSetContext(hParams, nullptr);
20-
ASSERT_EQ(result, UMF_RESULT_ERROR_NOT_SUPPORTED);
25+
ASSERT_NE(result, UMF_RESULT_SUCCESS);
2126

2227
result = umfCUDAMemoryProviderParamsSetDevice(hParams, 0);
23-
ASSERT_EQ(result, UMF_RESULT_ERROR_NOT_SUPPORTED);
28+
ASSERT_NE(result, UMF_RESULT_SUCCESS);
2429

2530
result = umfCUDAMemoryProviderParamsSetMemoryType(hParams,
2631
UMF_MEMORY_TYPE_DEVICE);
27-
ASSERT_EQ(result, UMF_RESULT_ERROR_NOT_SUPPORTED);
32+
ASSERT_NE(result, UMF_RESULT_SUCCESS);
2833

2934
result = umfCUDAMemoryProviderParamsSetAllocFlags(hParams, 0);
30-
ASSERT_EQ(result, UMF_RESULT_ERROR_NOT_SUPPORTED);
35+
ASSERT_NE(result, UMF_RESULT_SUCCESS);
3136

3237
const umf_memory_provider_ops_t *ops = umfCUDAMemoryProviderOps();
3338
ASSERT_EQ(ops, nullptr);

0 commit comments

Comments
 (0)