mirror of
https://github.com/microsoft/mscclpp.git
synced 2026-05-12 01:10:22 +00:00
revert
This commit is contained in:
@@ -10,32 +10,11 @@
|
||||
|
||||
#include "logger.hpp"
|
||||
|
||||
// NOTE: MRC_SUPPORT is a temporal macro that makes the current MRC implementation work.
|
||||
// MRC_SUPPORT is needed because the current libibverbs implmentation of MRC does not provide
|
||||
// all symbols that we need, so we need to load some symbols from the original libibverbs.
|
||||
// This macro will be removed (set 0) once MRC provides all necessary symbols.
|
||||
// Non-MRC environments will not be affected by this macro as long as VMRC_LIBIBVERBS_SO
|
||||
// environment variable is not set.
|
||||
#define MRC_SUPPORT 1
|
||||
#if (MRC_SUPPORT)
|
||||
#include <cstdlib>
|
||||
#include <set>
|
||||
#endif // (MRC_SUPPORT)
|
||||
|
||||
namespace mscclpp {
|
||||
|
||||
static std::unique_ptr<void, int (*)(void*)> globalIBVerbsHandle(nullptr, &::dlclose);
|
||||
#if (MRC_SUPPORT)
|
||||
static std::unique_ptr<void, int (*)(void*)> globalOrigIBVerbsHandle(nullptr, &::dlclose);
|
||||
#endif // (MRC_SUPPORT)
|
||||
|
||||
void* IBVerbs::dlsym(const std::string& symbol, bool allowReturnNull) {
|
||||
#if (MRC_SUPPORT)
|
||||
static std::set<std::string> mrcSymbols = {
|
||||
"ibv_get_device_list", "ibv_get_device_name", "ibv_open_device", "ibv_close_device", "ibv_query_qp",
|
||||
"ibv_create_cq", "ibv_destroy_cq", "ibv_create_qp", "ibv_modify_qp", "ibv_destroy_qp",
|
||||
};
|
||||
#endif // (MRC_SUPPORT)
|
||||
if (!globalIBVerbsHandle) {
|
||||
if (mscclpp::env()->ibvSo != "") {
|
||||
void* handle = ::dlopen(mscclpp::env()->ibvSo.c_str(), RTLD_NOW);
|
||||
@@ -56,26 +35,7 @@ void* IBVerbs::dlsym(const std::string& symbol, bool allowReturnNull) {
|
||||
THROW(NET, SysError, errno, "Failed to open libibverbs: ", std::string(::dlerror()));
|
||||
}
|
||||
}
|
||||
#if (MRC_SUPPORT)
|
||||
// In MRC mode, `VMRC_LIBIBVERBS_SO` should be set.
|
||||
char* vmrcLibibverbsSo = ::getenv("VMRC_LIBIBVERBS_SO");
|
||||
void* ptr;
|
||||
if (vmrcLibibverbsSo != nullptr && mrcSymbols.find(symbol) == mrcSymbols.end()) {
|
||||
// If we are in MRC mode and the symbol is not in the table, get it from the original libibverbs.
|
||||
if (!globalOrigIBVerbsHandle) {
|
||||
void* handle = ::dlopen(vmrcLibibverbsSo, RTLD_NOW);
|
||||
if (!handle) {
|
||||
THROW(NET, SysError, errno, "Failed to open ", std::string(vmrcLibibverbsSo));
|
||||
}
|
||||
globalOrigIBVerbsHandle.reset(handle);
|
||||
}
|
||||
ptr = ::dlsym(globalOrigIBVerbsHandle.get(), symbol.c_str());
|
||||
} else {
|
||||
ptr = ::dlsym(globalIBVerbsHandle.get(), symbol.c_str());
|
||||
}
|
||||
#else // !(MRC_SUPPORT)
|
||||
void* ptr = ::dlsym(globalIBVerbsHandle.get(), symbol.c_str());
|
||||
#endif // !(MRC_SUPPORT)
|
||||
if (!ptr && !allowReturnNull) {
|
||||
THROW(NET, SysError, errno, "Failed to load libibverbs symbol: ", symbol);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user