From 05596bc06075b13635ae1d2ed9a704e42d8e5caf Mon Sep 17 00:00:00 2001 From: "Oliveira, Daniel" Date: Tue, 14 May 2024 18:18:00 -0500 Subject: [PATCH] fix: [SWDEV-461904] [rocm/rocm_smi_lib] Checks returned error by rsmi_dev_od_volt_info_get() before assert Code changes related to the following: * Unit tests Change-Id: Icc0f329e35992aae19f07243024521181467bcd3 Signed-off-by: Oliveira, Daniel [ROCm/rocm_smi_lib commit: 497ef4a7ef090d70d2324c57f607d379af6df6dd] --- .../functional/volt_freq_curv_read.cc | 112 ++++++++++-------- 1 file changed, 65 insertions(+), 47 deletions(-) diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/volt_freq_curv_read.cc b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/volt_freq_curv_read.cc index e0e0bf2bab..60d068da19 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/volt_freq_curv_read.cc +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/volt_freq_curv_read.cc @@ -106,13 +106,22 @@ void TestVoltCurvRead::Run(void) { << amd::smi::getRSMIStatusString(err, false) << "\n"; } - CHK_ERR_ASRT(err) - ret = rsmi_dev_perf_level_get(i, &pfl); - IF_VERB(STANDARD) { - std::cout << "\t**rsmi_dev_perf_level_get(i, &pfl): " - << amd::smi::getRSMIStatusString(ret, false) << "\n"; + + if (err != rsmi_status_t::RSMI_STATUS_NOT_SUPPORTED) { + ASSERT_EQ(err, rsmi_status_t::RSMI_STATUS_SUCCESS); + ret = rsmi_dev_perf_level_get(i, &pfl); + IF_VERB(STANDARD) { + std::cout << "\t**rsmi_dev_perf_level_get(i, &pfl): " + << amd::smi::getRSMIStatusString(ret, false) << "\n"; + } + ASSERT_EQ(err, rsmi_status_t::RSMI_STATUS_SUCCESS); + } + else { + IF_VERB(STANDARD) { + std::cout << "\t**rsmi_dev_perf_level_get: Not supported on this " + "machine" << std::endl; + } } - CHK_ERR_ASRT(ret) // Verify api support checking functionality is working err = rsmi_dev_od_volt_info_get(i, nullptr); @@ -120,53 +129,62 @@ void TestVoltCurvRead::Run(void) { std::cout << "\t**rsmi_dev_od_volt_info_get(i, nullptr): " << amd::smi::getRSMIStatusString(err, false) << "\n"; } - ASSERT_TRUE(err == RSMI_STATUS_INVALID_ARGS); - err = rsmi_dev_od_volt_info_get(i, &odv); - IF_VERB(STANDARD) { - std::cout << "\t**rsmi_dev_od_volt_info_get(i, &odv): " - << amd::smi::getRSMIStatusString(err, false) << "\n" - << amd::smi::print_rsmi_od_volt_freq_data_t(&odv) - << "\t**odv.num_regions = " << std::dec - << odv.num_regions << "\n"; - } - if (err == RSMI_STATUS_SUCCESS) { - std::cout << "\t**Frequency-voltage curve data:" << "\n"; - std::cout << amd::smi::print_rsmi_od_volt_freq_data_t(&odv); - rsmi_freq_volt_region_t *regions{}; - uint32_t num_regions; - regions = new rsmi_freq_volt_region_t[odv.num_regions]; - ASSERT_TRUE(regions != nullptr); - - num_regions = odv.num_regions; - err = rsmi_dev_od_volt_curve_regions_get(i, &num_regions, regions); + if (err != rsmi_status_t::RSMI_STATUS_NOT_SUPPORTED) { + ASSERT_EQ(err, rsmi_status_t::RSMI_STATUS_INVALID_ARGS); + err = rsmi_dev_od_volt_info_get(i, &odv); IF_VERB(STANDARD) { - std::cout << "\t**rsmi_dev_od_volt_curve_regions_get(" - << "i, &num_regions, regions): " - << amd::smi::getRSMIStatusString(err, false) << "\n" - << "\t**Number of regions: " << std::dec << num_regions - << "\n"; + std::cout << "\t**rsmi_dev_od_volt_info_get(i, &odv): " + << amd::smi::getRSMIStatusString(err, false) << "\n" + << amd::smi::print_rsmi_od_volt_freq_data_t(&odv) + << "\t**odv.num_regions = " << std::dec + << odv.num_regions << "\n"; } - ASSERT_TRUE(err == RSMI_STATUS_SUCCESS - || err == RSMI_STATUS_NOT_SUPPORTED - || err == RSMI_STATUS_UNEXPECTED_DATA - || err == RSMI_STATUS_UNEXPECTED_SIZE - || err == RSMI_STATUS_INVALID_ARGS); - if (err != RSMI_STATUS_SUCCESS) { + if (err == rsmi_status_t::RSMI_STATUS_SUCCESS) { + std::cout << "\t**Frequency-voltage curve data:" << "\n"; + std::cout << amd::smi::print_rsmi_od_volt_freq_data_t(&odv); + + rsmi_freq_volt_region_t *regions{}; + uint32_t num_regions; + regions = new rsmi_freq_volt_region_t[odv.num_regions]; + ASSERT_NE(regions, nullptr); + + num_regions = odv.num_regions; + err = rsmi_dev_od_volt_curve_regions_get(i, &num_regions, regions); IF_VERB(STANDARD) { - std::cout << "\t**rsmi_dev_od_volt_curve_regions_get: " - "Not supported on this machine" << std::endl; + std::cout << "\t**rsmi_dev_od_volt_curve_regions_get(" + << "i, &num_regions, regions): " + << amd::smi::getRSMIStatusString(err, false) << "\n" + << "\t**Number of regions: " << std::dec << num_regions + << "\n"; } - continue; + ASSERT_TRUE(err == RSMI_STATUS_SUCCESS + || err == RSMI_STATUS_NOT_SUPPORTED + || err == RSMI_STATUS_UNEXPECTED_DATA + || err == RSMI_STATUS_UNEXPECTED_SIZE + || err == RSMI_STATUS_INVALID_ARGS); + if (err != RSMI_STATUS_SUCCESS) { + IF_VERB(STANDARD) { + std::cout << "\t**rsmi_dev_od_volt_curve_regions_get: " + "Not supported on this machine" << std::endl; + } + continue; + } + ASSERT_EQ(err, rsmi_status_t::RSMI_STATUS_SUCCESS); + ASSERT_EQ(num_regions, odv.num_regions); + + std::cout << "\t**Frequency-voltage curve regions:" << std::endl; + std::cout << amd::smi::print_rsmi_od_volt_freq_regions(num_regions, + regions); + + delete []regions; + } + } + else { + IF_VERB(STANDARD) { + std::cout << "\t**rsmi_dev_od_volt_info_get: Not supported on this " + "machine" << std::endl; } - CHK_ERR_ASRT(err) - ASSERT_TRUE(num_regions == odv.num_regions); - - std::cout << "\t**Frequency-voltage curve regions:" << std::endl; - std::cout << amd::smi::print_rsmi_od_volt_freq_regions(num_regions, - regions); - - delete []regions; } } }