amdsmi [CPU]: Add implementation to get cpu handles and core handles API

- Update the API names, parameters to return cpu handles and core
handles in the system.
  - Update the amdsmi_wrapper.py.
  - Update the amdsmi_interface.py to use the processor handles and
    core handles API.

Change-Id: Ie24f62f345864f8b6773fdb3c6369993bca7e25b
Tento commit je obsažen v:
Khader Basha Shaik
2024-10-04 12:20:02 +00:00
odevzdal Naveen Krishna Chatradhi
rodič dd8795b099
revize 8308ede9e8
4 změnil soubory, kde provedl 174 přidání a 105 odebrání
+109
Zobrazit soubor
@@ -3842,6 +3842,115 @@ amdsmi_status_t amdsmi_get_cpu_model(uint32_t *cpu_model)
return AMDSMI_STATUS_SUCCESS;
}
amdsmi_status_t amdsmi_get_cpu_handles(uint32_t *cpu_count,
amdsmi_processor_handle *processor_handles)
{
uint32_t soc_count = 0, index = 0, cpu_per_soc = 0;
processor_type_t processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU;
std::vector<amdsmi_processor_handle> cpu_handles;
amdsmi_status_t status;
AMDSMI_CHECK_INIT();
if (cpu_count == nullptr)
return AMDSMI_STATUS_INVAL;
status = amdsmi_get_socket_handles(&soc_count, nullptr);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
// Allocate the memory for the sockets
std::vector<amdsmi_socket_handle> sockets(soc_count);
// Get the sockets of the system
status = amdsmi_get_socket_handles(&soc_count, &sockets[0]);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
for (index = 0 ; index < soc_count; index++)
{
cpu_per_soc = 0;
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
nullptr, &cpu_per_soc);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
// Allocate the memory for the cpus
std::vector<amdsmi_processor_handle> plist(cpu_per_soc);
// Get the cpus for each socket
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
&plist[0], &cpu_per_soc);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
cpu_handles.insert(cpu_handles.end(), plist.begin(), plist.end());
}
// Get the cpu count
*cpu_count = cpu_handles.size();
if (processor_handles == nullptr)
return AMDSMI_STATUS_SUCCESS;
// Copy the cpu socket handles
for (uint32_t i = 0; i < *cpu_count; i++)
processor_handles[i] = reinterpret_cast<amdsmi_processor_handle>(cpu_handles[i]);
return status;
}
amdsmi_status_t amdsmi_get_cpucore_handles(uint32_t *cores_count,
amdsmi_processor_handle* processor_handles)
{
uint32_t soc_count = 0, index = 0, cores_per_soc = 0;
processor_type_t processor_type = AMDSMI_PROCESSOR_TYPE_AMD_CPU_CORE;
std::vector<amdsmi_processor_handle> core_handles;
amdsmi_status_t status;
AMDSMI_CHECK_INIT();
if (cores_count == nullptr) {
return AMDSMI_STATUS_INVAL;
}
// Get sockets count
status = amdsmi_get_socket_handles(&soc_count, nullptr);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
// Allocate the memory for the sockets
std::vector<amdsmi_socket_handle> sockets(soc_count);
// Get the sockets of the system
status = amdsmi_get_socket_handles(&soc_count, &sockets[0]);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
for (index = 0 ; index < soc_count; index++)
{
cores_per_soc = 0;
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
nullptr, &cores_per_soc);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
// Allocate the memory for the cores
std::vector<amdsmi_processor_handle> plist(cores_per_soc);
// Get the coress for each socket
status = amdsmi_get_processor_handles_by_type(sockets[index], processor_type,
&plist[0], &cores_per_soc);
if (status != AMDSMI_STATUS_SUCCESS)
return status;
core_handles.insert(core_handles.end(), plist.begin(), plist.end());
}
// Get the cores count
*cores_count = core_handles.size();
if (processor_handles == nullptr)
return AMDSMI_STATUS_SUCCESS;
// Copy the core handles
for (uint32_t i = 0; i < *cores_count; i++)
processor_handles[i] = reinterpret_cast<amdsmi_processor_handle>(core_handles[i]);
return status;
}
amdsmi_status_t amdsmi_get_esmi_err_msg(amdsmi_status_t status, const char **status_string)
{
for (auto& iter : amd::smi::esmi_status_map) {