diff --git a/include/amd_smi/amdsmi.h b/include/amd_smi/amdsmi.h index 2a3b3c722f..cc934bffc0 100644 --- a/include/amd_smi/amdsmi.h +++ b/include/amd_smi/amdsmi.h @@ -4224,13 +4224,15 @@ amdsmi_status_t amdsmi_get_number_of_cpu_sockets(uint32_t sockets); /** * @brief Get first online core on socket. * + * @param[in] socket_handle Cpu socket which to query * @param[in] sock_ind - socket index. * * @param[in,out] sockets - Input buffer to fill first online core on socket data * * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail */ -amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(uint32_t sock_ind, uint32_t *pcore_ind); +amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t *pcore_ind); /** * @brief Get a description of provided AMDSMI error status for esmi errors. diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index 0ec96ec544..fd0a1e3d4e 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -2713,6 +2713,29 @@ amdsmi_status_t amdsmi_get_cpu_model(uint32_t model) return AMDSMI_STATUS_SUCCESS; } +amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_cpusocket_handle socket_handle, + uint32_t sock_ind, uint32_t *pcore_ind) +{ + amdsmi_status_t status; + uint32_t online_core; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_first_online_core_on_socket(sock_ind, &online_core)); + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + *pcore_ind = online_core; + + return AMDSMI_STATUS_SUCCESS; +} + const char* amdsmi_get_esmi_err_msg(amdsmi_status_t status, const char **status_string) { for (auto& iter : amd::smi::esmi_status_map) {