Fix rocminfo when run within docker environments

Currently, rocminfo will fail when executed inside a docker container
due to being unable to lsmod inside docker. This has impacts on
rocprofiler use.

Fix this behavior by querying initstate of the amdgpu module from
/sys/module/amdgpu instead. If initstate is marked "live" everything if
fine - error out with either "not loaded" (initstate file does not
exist) or "not live" (initstate file does not contain "live" string).

Change-Id: I6f2e9655942fd4cf840fd3f56b7d69e893fa84d7


[ROCm/rocminfo commit: 94b4b3f0a6]
This commit is contained in:
Johannes Dieterich
2022-11-21 18:09:55 +00:00
کامیت شده توسط David Yat Sin
والد 1c1a0f299c
کامیت 2f3b22dc90
+24 -6
مشاهده پرونده
@@ -51,6 +51,7 @@
#include <unistd.h>
#include <pwd.h>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
@@ -1039,16 +1040,33 @@ AcquireAndDisplayAgentInfo(hsa_agent_t agent, void* data) {
int CheckInitialState(void) {
// Check kernel module for ROCk is loaded
FILE *fd = popen("lsmod | grep amdgpu", "r");
char buf[16];
if (fread (buf, 1, sizeof (buf), fd) == 0) {
std::ifstream amdgpu_initstate("/sys/module/amdgpu/initstate");
if (amdgpu_initstate){
std::stringstream buffer;
buffer << amdgpu_initstate.rdbuf();
amdgpu_initstate.close();
std::string line;
bool is_live = false;
while (std::getline(buffer, line)){
if (line.find( "live" ) != std::string::npos){
is_live = true;
break;
}
}
if (is_live){
printf("%sROCk module is loaded%s\n", COL_WHT, COL_RESET);
} else {
printf("%sROCk module is NOT live, possibly no GPU devices%s\n",
COL_RED, COL_RESET);
return -1;
}
} else {
printf("%sROCk module is NOT loaded, possibly no GPU devices%s\n",
COL_RED, COL_RESET);
return -1;
} else {
printf("%sROCk module is loaded%s\n", COL_WHT, COL_RESET);
}
pclose(fd);
// Check if user belongs to the group for /dev/kfd (e.g. "video" or
// "render")