mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
Fix issue with board number property
Buffer usage of less size resulted in invalid board number. Added logic to use sufficient size to retrieve board number from PMT. Added logic to provide decoded values rather than ASCII characters. Related-To: LOCI-3545 Signed-off-by: Bellekallu Rajkiran <bellekallu.rajkiran@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
eee6a2439f
commit
47a2d309bb
@@ -42,7 +42,7 @@ static const std::map<int, zes_engine_type_flags_t> engineMap = {
|
||||
{3, ZES_ENGINE_TYPE_FLAG_MEDIA},
|
||||
{4, ZES_ENGINE_TYPE_FLAG_COMPUTE}};
|
||||
|
||||
bool LinuxGlobalOperationsImp::readTelemData(char (&data)[ZES_STRING_PROPERTY_SIZE], const ssize_t bytesToRead, const std::string &key) {
|
||||
bool LinuxGlobalOperationsImp::getTelemOffsetAndTelemDir(uint64_t &telemOffset, const std::string &key, std::string &telemDir) {
|
||||
auto pDrm = &pLinuxSysmanImp->getDrm();
|
||||
std::optional<std::string> rootPath = NEO::getPciRootPath(pDrm->getFileDescriptor());
|
||||
if (!rootPath.has_value()) {
|
||||
@@ -56,7 +56,7 @@ bool LinuxGlobalOperationsImp::readTelemData(char (&data)[ZES_STRING_PROPERTY_SI
|
||||
}
|
||||
|
||||
auto iterator = telemPciPath.begin();
|
||||
std::string_view telemDir = iterator->second;
|
||||
telemDir = iterator->second;
|
||||
|
||||
std::array<char, NEO::PmtUtil::guidStringSize> guidString = {};
|
||||
if (!NEO::PmtUtil::readGuid(telemDir, guidString)) {
|
||||
@@ -72,24 +72,30 @@ bool LinuxGlobalOperationsImp::readTelemData(char (&data)[ZES_STRING_PROPERTY_SI
|
||||
if (ZE_RESULT_SUCCESS == PlatformMonitoringTech::getKeyOffsetMap(guidString.data(), keyOffsetMap)) {
|
||||
auto keyOffset = keyOffsetMap.find(key.c_str());
|
||||
if (keyOffset != keyOffsetMap.end()) {
|
||||
uint64_t value;
|
||||
ssize_t bytesRead = NEO::PmtUtil::readTelem(telemDir.data(), bytesToRead, keyOffset->second + offset, &value);
|
||||
if (bytesRead == bytesToRead) {
|
||||
std::ostringstream telemDataString;
|
||||
telemDataString << std::hex << std::showbase << value;
|
||||
memcpy_s(data, ZES_STRING_PROPERTY_SIZE, telemDataString.str().c_str(), telemDataString.str().size());
|
||||
return true;
|
||||
}
|
||||
telemOffset = keyOffset->second + offset;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LinuxGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
if (!LinuxGlobalOperationsImp::readTelemData(serialNumber, sizeof(uint64_t), "PPIN")) {
|
||||
uint64_t offset = 0;
|
||||
std::string telemDir = {};
|
||||
if (!LinuxGlobalOperationsImp::getTelemOffsetAndTelemDir(offset, "PPIN", telemDir)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
uint64_t value;
|
||||
ssize_t bytesRead = NEO::PmtUtil::readTelem(telemDir.data(), sizeof(uint64_t), offset, &value);
|
||||
if (bytesRead == sizeof(uint64_t)) {
|
||||
std::ostringstream telemDataString;
|
||||
telemDataString << std::hex << std::showbase << value;
|
||||
memcpy_s(serialNumber, ZES_STRING_PROPERTY_SIZE, telemDataString.str().c_str(), telemDataString.str().size());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Device *LinuxGlobalOperationsImp::getDevice() {
|
||||
@@ -97,12 +103,20 @@ Device *LinuxGlobalOperationsImp::getDevice() {
|
||||
}
|
||||
|
||||
bool LinuxGlobalOperationsImp::getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
const ssize_t boardNumberSize = 32;
|
||||
if (!LinuxGlobalOperationsImp::readTelemData(boardNumber, boardNumberSize, "BoardNumber")) {
|
||||
uint64_t offset = 0;
|
||||
std::string telemDir = {};
|
||||
constexpr uint32_t boardNumberSize = 32;
|
||||
if (!LinuxGlobalOperationsImp::getTelemOffsetAndTelemDir(offset, "BoardNumber", telemDir)) {
|
||||
return false;
|
||||
}
|
||||
std::array<uint8_t, boardNumberSize> value;
|
||||
ssize_t bytesRead = NEO::PmtUtil::readTelem(telemDir.data(), boardNumberSize, offset, value.data());
|
||||
if (bytesRead == boardNumberSize) {
|
||||
memcpy_s(boardNumber, ZES_STRING_PROPERTY_SIZE, value.data(), bytesRead);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void LinuxGlobalOperationsImp::getBrandName(char (&brandName)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
|
||||
@@ -54,7 +54,7 @@ class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMo
|
||||
static const std::string srcVersionFile;
|
||||
static const std::string agamaVersionFile;
|
||||
static const std::string ueventWedgedFile;
|
||||
bool readTelemData(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE], const ssize_t bytesToRead, const std::string &key);
|
||||
bool getTelemOffsetAndTelemDir(uint64_t &telemOffset, const std::string &key, std::string &telemDir);
|
||||
std::string devicePciBdf = "";
|
||||
NEO::ExecutionEnvironment *executionEnvironment = nullptr;
|
||||
uint32_t rootDeviceIndex = 0u;
|
||||
|
||||
Reference in New Issue
Block a user