From 7a64038110f5519c146987e5f6412c4e01e5be74 Mon Sep 17 00:00:00 2001 From: "Narlo, Joseph" Date: Fri, 9 May 2025 12:33:13 -0500 Subject: [PATCH] [SWDEV-418701] rsmitst Fallback with Driver-less Hardware (#329) Signed-off-by: josnarlo [ROCm/amdsmi commit: a66c6fa03b370217a288fa993589a05a7b5f03e2] --- .../functional/computepartition_read_write.cc | 1 + .../functional/evt_notif_read_write.cc | 3 +- projects/amdsmi/tests/amd_smi_test/main.cc | 13 ++++++++ .../amdsmi/tests/amd_smi_test/test_base.cc | 32 +++++++++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/projects/amdsmi/tests/amd_smi_test/functional/computepartition_read_write.cc b/projects/amdsmi/tests/amd_smi_test/functional/computepartition_read_write.cc index a711d9fac3..573ec49772 100755 --- a/projects/amdsmi/tests/amd_smi_test/functional/computepartition_read_write.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/computepartition_read_write.cc @@ -386,6 +386,7 @@ void TestComputePartitionReadWrite::Run(void) { std::cout << "** SetUp Failed for this test. Skipping.**" << std::endl; return; } + bool isVerbose = (this->verbosity() && this->verbosity() >= (this->TestBase::VERBOSE_STANDARD)) ? true: false; // Confirm system supports compute partition, before executing wait diff --git a/projects/amdsmi/tests/amd_smi_test/functional/evt_notif_read_write.cc b/projects/amdsmi/tests/amd_smi_test/functional/evt_notif_read_write.cc index 7fd76910fe..a1cd7eb970 100644 --- a/projects/amdsmi/tests/amd_smi_test/functional/evt_notif_read_write.cc +++ b/projects/amdsmi/tests/amd_smi_test/functional/evt_notif_read_write.cc @@ -71,8 +71,7 @@ void TestEvtNotifReadWrite::Run(void) { if (setup_failed_) { IF_VERB(STANDARD) { - std::cout << "** SetUp Failed for this test. Skipping.**" << - std::endl; + std::cout << "** SetUp Failed for this test. Skipping.**" << std::endl; } return; } diff --git a/projects/amdsmi/tests/amd_smi_test/main.cc b/projects/amdsmi/tests/amd_smi_test/main.cc index e7f0cc1b88..5531991bac 100644 --- a/projects/amdsmi/tests/amd_smi_test/main.cc +++ b/projects/amdsmi/tests/amd_smi_test/main.cc @@ -122,6 +122,7 @@ TEST(amdsmitstReadOnly, FanRead) { RunGenericTest(&tst); } TEST(amdsmitstReadWrite, FanReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestFanReadWrite tst; RunGenericTest(&tst); } @@ -144,6 +145,7 @@ TEST(amdsmitstReadOnly, TestPerfLevelRead) { } TEST(amdsmitstReadWrite, TestPerfLevelReadWrite) { if (amd::smi::is_vm_guest()) GTEST_SKIP(); + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestPerfLevelReadWrite tst; RunGenericTest(&tst); } @@ -152,6 +154,7 @@ TEST(amdsmitstReadOnly, TestOverdriveRead) { RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestOverdriveReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestOverdriveReadWrite tst; RunGenericTest(&tst); } @@ -160,11 +163,13 @@ TEST(amdsmitstReadOnly, TestFrequenciesRead) { RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestFrequenciesReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestFrequenciesReadWrite tst; RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestPciReadWrite) { if (amd::smi::is_vm_guest()) GTEST_SKIP(); + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestPciReadWrite tst; RunGenericTest(&tst); } @@ -184,11 +189,13 @@ TEST(amdsmitstReadOnly, TestPowerRead) { } TEST(amdsmitstReadWrite, TestPowerReadWrite) { if (amd::smi::is_vm_guest()) GTEST_SKIP(); + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestPowerReadWrite tst; RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestPowerCapReadWrite) { if (amd::smi::is_vm_guest()) GTEST_SKIP(); + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestPowerCapReadWrite tst; RunGenericTest(&tst); } @@ -206,6 +213,7 @@ TEST(amdsmitstReadOnly, TestIdInfoRead) { RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestPerfCntrReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestPerfCntrReadWrite tst; RunGenericTest(&tst); } @@ -226,10 +234,12 @@ TEST(amdsmitstReadOnly, TestMetricsCounterRead) { RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestPerfDeterminism) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestPerfDeterminism tst; RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestXGMIReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestXGMIReadWrite tst; RunGenericTest(&tst); } @@ -253,16 +263,19 @@ TEST(amdsmitstReadOnly, TestMutualExclusion) { */ TEST(amdsmitstReadWrite, TestComputePartitionReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestComputePartitionReadWrite tst; RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestMemoryPartitionReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestMemoryPartitionReadWrite tst; RunGenericTest(&tst); } TEST(amdsmitstReadWrite, TestEvtNotifReadWrite) { + if (!amd::smi::is_sudo_user()) GTEST_SKIP_("Invalid permission - Must run as super user"); TestEvtNotifReadWrite tst; RunGenericTest(&tst); } diff --git a/projects/amdsmi/tests/amd_smi_test/test_base.cc b/projects/amdsmi/tests/amd_smi_test/test_base.cc index 564ea5dea6..758c900cd4 100644 --- a/projects/amdsmi/tests/amd_smi_test/test_base.cc +++ b/projects/amdsmi/tests/amd_smi_test/test_base.cc @@ -26,6 +26,7 @@ #include "amd_smi/amdsmi.h" #include "amd_smi/impl/amd_smi_utils.h" +#include "rocm_smi/rocm_smi_utils.h" #include "test_base.h" #include "test_common.h" @@ -40,6 +41,14 @@ static const char kResultsLabel[] = "TEST RESULTS"; // This one is used outside this file const char kSetupLabel[] = "TEST SETUP"; +static bool CheckModule(const std::string &fileName, const std::string &cond) { + std::string state; + int rc = amd::smi::ReadSysfsStr(fileName, &state); + if (!rc && !state.compare(cond)) + return (true); + return (false); +} + TestBase::TestBase() : setup_failed_(false) { } TestBase::~TestBase() = default; @@ -79,6 +88,29 @@ void TestBase::SetUp(uint64_t init_flags) { if (err != AMDSMI_STATUS_SUCCESS) { setup_failed_ = true; + + // Returns true if amdgpu is found in the list of initialized modules + bool found_amdgpu = CheckModule("/sys/module/amdgpu/initstate", "live"); + if (!found_amdgpu) { + IF_VERB(STANDARD) { + std::cerr << "ERROR: Unable to get devices, driver not initialized (amdgpu not found in modules)" << std::endl; + std::cerr << "ERROR: Unable to detect any GPU devices, check amdgpu version and module status (sudo modprobe amdgpu)" << std::endl; + } + } + + // Returns true if amd_hsmp is found in the list of initialized modules + bool found_amd_hsmp = CheckModule("/sys/module/amd_hsmp/initstate", "live"); + if (!found_amd_hsmp) { + IF_VERB(STANDARD) { + std::cerr << "ERROR: Unable to get devices, driver not initialized (amd_hsmp not found in modules)" << std::endl; + std::cerr << "ERROR: Unable to detect any CPU devices, check amd_hsmp version and module status (sudo modprobe amd_hsmp)" << std::endl; + } + } + + if (!found_amdgpu || !found_amd_hsmp) { + ASSERT_EQ(err, AMDSMI_STATUS_SUCCESS); + exit(err); + } } ASSERT_EQ(err, AMDSMI_STATUS_SUCCESS);