nvidia-docker/src/nvml/nvml_dl.c

47 lines
1.2 KiB
C
Raw Normal View History

2016-01-06 00:45:23 +01:00
// Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
#include <stddef.h>
#include <dlfcn.h>
#include "nvml_dl.h"
2016-03-19 01:00:03 +01:00
#define DLSYM(x, sym) \
do { \
dlerror(); \
x = dlsym(handle, #sym); \
if (dlerror() != NULL) { \
return (NVML_ERROR_FUNCTION_NOT_FOUND); \
} \
} while (0)
typedef nvmlReturn_t (*nvmlSym_t)();
static void *handle;
2016-03-19 01:00:03 +01:00
nvmlReturn_t NVML_DL(nvmlInit)(void)
{
2016-03-22 23:17:57 +01:00
handle = dlopen("libnvidia-ml.so.1", RTLD_LAZY | RTLD_GLOBAL);
2016-03-19 01:00:03 +01:00
if (handle == NULL) {
return (NVML_ERROR_LIBRARY_NOT_FOUND);
}
return (nvmlInit());
}
2016-03-19 01:00:03 +01:00
nvmlReturn_t NVML_DL(nvmlShutdown)(void)
{
2016-03-19 01:00:03 +01:00
nvmlReturn_t r = nvmlShutdown();
if (r != NVML_SUCCESS) {
return (r);
}
return (dlclose(handle) ? NVML_ERROR_UNKNOWN : NVML_SUCCESS);
}
nvmlReturn_t NVML_DL(nvmlDeviceGetTopologyCommonAncestor)(
nvmlDevice_t dev1, nvmlDevice_t dev2, nvmlGpuTopologyLevel_t *info)
{
nvmlSym_t sym;
DLSYM(sym, nvmlDeviceGetTopologyCommonAncestor);
2016-03-19 01:00:03 +01:00
return ((*sym)(dev1, dev2, info));
}