diff --git a/projects/rocm-smi-lib/src/rocm_smi.cc b/projects/rocm-smi-lib/src/rocm_smi.cc index 702d6d6ae8..42d5521ed0 100755 --- a/projects/rocm-smi-lib/src/rocm_smi.cc +++ b/projects/rocm-smi-lib/src/rocm_smi.cc @@ -4836,15 +4836,11 @@ rsmi_dev_memory_partition_set(uint32_t dv_ind, << devInfoTypesStrings.at(amd::smi::kDevMemoryPartition) << " | Cause: device board name does not support this action" << " | Returning = " - << getRSMIStatusString(RSMI_STATUS_INVALID_ARGS) << " |"; + << getRSMIStatusString(RSMI_STATUS_NOT_SUPPORTED) << " |"; LOG_ERROR(ss); return RSMI_STATUS_NOT_SUPPORTED; } - std::string newMemoryPartition - = mapRSMIToStringMemoryPartitionTypes.at(memory_partition); - std::string currentMemoryPartition; - switch (memory_partition) { case RSMI_MEMORY_PARTITION_NPS1: case RSMI_MEMORY_PARTITION_NPS2: @@ -4865,6 +4861,9 @@ rsmi_dev_memory_partition_set(uint32_t dv_ind, LOG_ERROR(ss); return RSMI_STATUS_INVALID_ARGS; } + std::string newMemoryPartition + = mapRSMIToStringMemoryPartitionTypes.at(memory_partition); + std::string currentMemoryPartition; // do nothing if memory_partition is the current mode rsmi_status_t ret_get = get_memory_partition(dv_ind, currentMemoryPartition); @@ -4907,6 +4906,9 @@ rsmi_dev_memory_partition_set(uint32_t dv_ind, if (amd::smi::ErrnoToRsmiStatus(ret) != RSMI_STATUS_SUCCESS) { rsmi_status_t err = amd::smi::ErrnoToRsmiStatus(ret); + if (ret == EACCES) { + err = RSMI_STATUS_NOT_SUPPORTED; // already verified permissions + } ss << __PRETTY_FUNCTION__ << " | ======= end ======= " << " | Fail " diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/computepartition_read_write.cc b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/computepartition_read_write.cc index ebfc9488f7..4fabb84f6f 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/computepartition_read_write.cc +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/computepartition_read_write.cc @@ -237,8 +237,10 @@ void TestComputePartitionReadWrite::Run(void) { } // Verify api support checking functionality is working - err = rsmi_dev_compute_partition_set(dv_ind, - RSMI_COMPUTE_PARTITION_INVALID); + rsmi_compute_partition_type_t breakMe; + err = rsmi_dev_compute_partition_set(dv_ind, breakMe); + std::cout << "\t**rsmi_dev_compute_partition_set(null ptr): " + << amd::smi::getRSMIStatusString(err, false) << "\n"; ASSERT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || (err == RSMI_STATUS_NOT_SUPPORTED) || (err == RSMI_STATUS_PERMISSION)); diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/memorypartition_read_write.cc b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/memorypartition_read_write.cc index c24d3a915c..c4d2c761ee 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/memorypartition_read_write.cc +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/memorypartition_read_write.cc @@ -53,6 +53,7 @@ #include "gtest/gtest.h" #include "rocm_smi/rocm_smi.h" #include "rocm_smi_test/functional/memorypartition_read_write.h" +#include "rocm_smi/rocm_smi_utils.h" #include "rocm_smi_test/test_common.h" TestMemoryPartitionReadWrite::TestMemoryPartitionReadWrite() : TestBase() { @@ -123,6 +124,7 @@ void TestMemoryPartitionReadWrite::Run(void) { } for (uint32_t dv_ind = 0; dv_ind < num_monitor_devs(); ++dv_ind) { + bool wasSetSuccess = false; if (dv_ind != 0) { IF_VERB(STANDARD) { std::cout << std::endl; @@ -197,8 +199,10 @@ void TestMemoryPartitionReadWrite::Run(void) { /* rsmi_dev_memory_partition_set(...) */ /******************************/ // Verify api support checking functionality is working - rsmi_memory_partition_type new_memory_partition; + rsmi_memory_partition_type new_memory_partition = {}; err = rsmi_dev_memory_partition_set(dv_ind, new_memory_partition); + std::cout << "\t**rsmi_dev_memory_partition_set(null ptr): " + << amd::smi::getRSMIStatusString(err, false) << "\n"; // Note: new_memory_partition is not set ASSERT_TRUE((err == RSMI_STATUS_INVALID_ARGS) || (err == RSMI_STATUS_NOT_SUPPORTED)); @@ -264,7 +268,18 @@ void TestMemoryPartitionReadWrite::Run(void) { << memoryPartitionString(new_memory_partition) << std::endl; } ret = rsmi_dev_memory_partition_set(dv_ind, new_memory_partition); - CHK_ERR_ASRT(ret) + if (ret == RSMI_STATUS_NOT_SUPPORTED) { + IF_VERB(STANDARD) { + std::cout << "\t**" << ": " + << "Not supported on this machine" << std::endl; + } + break; + } else { + CHK_ERR_ASRT(ret) + } + if (ret != RSMI_STATUS_SUCCESS) { // do not continue trying to reset + wasSetSuccess = true; + } ret = rsmi_dev_memory_partition_get(dv_ind, current_memory_partition, 255); @@ -301,7 +316,7 @@ void TestMemoryPartitionReadWrite::Run(void) { << "Current memory partition: " << current_memory_partition << std::endl; } - if (wasResetSuccess) { + if (wasResetSuccess && wasSetSuccess) { ASSERT_STRNE(oldMode.c_str(), current_memory_partition); IF_VERB(STANDARD) { std::cout << "\t**"