kfdtest: Set XNACK mode according HSA_XNACK env setting

According env setting HSA_XNACK=1 or 0, set XNACK mode ON or OFF to run
KFDSVMRangeTest and KFDSVMEvictTest. If HSA_XNACK is not defined, use
system boot-time XNACK mode setting.

Restore to the original XNACK mode when test finished.

Change-Id: Ia896a1b0a90854646c8a79acca38a7d46098efde
Signed-off-by: Philip Yang <Philip.Yang@amd.com>


[ROCm/ROCR-Runtime commit: 23ec6e880e]
Este commit está contenido en:
Philip Yang
2022-04-04 20:16:59 -04:00
padre 94a27af7ad
commit 949f8fc7aa
Se han modificado 4 ficheros con 64 adiciones y 4 borrados
@@ -73,6 +73,7 @@ class KFDBaseComponentTest : public testing::Test {
unsigned int m_numSdmaQueuesPerEngine;
HsaMemFlags m_MemoryFlags;
HsaNodeInfo m_NodeInfo;
HSAint32 m_xnack;
// @brief Executed before every test that uses KFDBaseComponentTest class and sets all common settings for the tests.
virtual void SetUp();
@@ -86,6 +87,39 @@ class KFDBaseComponentTest : public testing::Test {
LOG() << "SVM API not supported" << std::endl;
return supported;
}
void SVMSetXNACKMode() {
if (!SVMAPISupported())
return;
m_xnack = -1;
char *hsa_xnack = getenv("HSA_XNACK");
if (!hsa_xnack)
return;
HSAKMT_STATUS ret = hsaKmtGetXNACKMode(&m_xnack);
if (ret != HSAKMT_STATUS_SUCCESS) {
LOG() << "Failed " << ret << " to get XNACK mode" << std::endl;
return;
}
// XNACK OFF if defined HSA_XNACK=0
HSAint32 xnack_on = strncmp(hsa_xnack, "0", 1);
ret = hsaKmtSetXNACKMode(xnack_on);
if (ret != HSAKMT_STATUS_SUCCESS)
LOG() << "Failed " << ret << " to set XNACK mode " << xnack_on << std::endl;
}
void SVMRestoreXNACKMode() {
if (!SVMAPISupported())
return;
if (m_xnack == -1)
return;
hsaKmtSetXNACKMode(m_xnack);
}
};
extern KFDBaseComponentTest* g_baseTest;