RDC module framework
The framework is required for RAS integration. When the RAS fields need to be retrieved, the framework will load the RAS library at run time, and then call the RAS function to retrieve RAS metrics. * The RdcModuleMgr will be used to manage different modules. RDC only has the telemetry module now. * When RDCTelemetryModule is loaded, it will load the RAS library. It will also call rdc_telemetry_fields_query() defined in the RAS library for the list of fields RAS supported. * The RdcSmiLib is a wrapper for the rocm_msi_lib to provide the interface required by the RDCTelemetryModule. * The RdcWatchTable will use the RdcModuleMgr to get the RDCTelemetryModule to bulk fetch mulitple fields. * The RdcTelemetryModule will dispatch those fields to different library: RdcSmiLib or RdcRasLib. The watch() and unwatch() in the RDCTelemetryModule will been implemented at the next task. Change-Id: I81b01d5b52d1ea3cdcec7c09af86b6622dd5899e
Этот коммит содержится в:
@@ -28,6 +28,25 @@ namespace rdc {
|
||||
RdcLibraryLoader::RdcLibraryLoader(): libHandler_(nullptr) {
|
||||
}
|
||||
|
||||
rdc_status_t RdcLibraryLoader::load(const char* filename) {
|
||||
if (filename == nullptr) {
|
||||
return RDC_ST_FAIL_LOAD_MODULE;
|
||||
}
|
||||
if (libHandler_) {
|
||||
unload();
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> guard(library_mutex_);
|
||||
libHandler_ = dlopen(filename, RTLD_LAZY);
|
||||
if (!libHandler_) {
|
||||
char* error = dlerror();
|
||||
RDC_LOG(RDC_ERROR, "Fail to open " << filename <<": " << error);
|
||||
return RDC_ST_FAIL_LOAD_MODULE;
|
||||
}
|
||||
|
||||
return RDC_ST_OK;
|
||||
}
|
||||
|
||||
rdc_status_t RdcLibraryLoader::unload() {
|
||||
std::lock_guard<std::mutex> guard(library_mutex_);
|
||||
if (libHandler_) {
|
||||
|
||||
Ссылка в новой задаче
Block a user