From 3a4d60995a0a91d6ea4469305c5d3d8778c5abd9 Mon Sep 17 00:00:00 2001 From: "Pham, Gabriel" Date: Wed, 5 Feb 2025 20:09:44 -0500 Subject: [PATCH] Changed default behavior of amdsmi_get_gpu_virtualization_mode (#97) Changed return behavior of amdsmi_get_gpu_virtualization_mode Signed-off-by: Maisam Arif Signed-off-by: gabrpham Co-authored-by: Maisam Arif [ROCm/amdsmi commit: 09379f8438ebcb42ff7168f87f64ea76c6d2b325] --- .../amdsmi/docs/reference/amdsmi-py-api.md | 2 +- projects/amdsmi/include/amd_smi/amdsmi.h | 21 +++++++++++++++++++ projects/amdsmi/src/amd_smi/amd_smi.cc | 18 ++++++++-------- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/projects/amdsmi/docs/reference/amdsmi-py-api.md b/projects/amdsmi/docs/reference/amdsmi-py-api.md index 2ccb7b12ae..9b8e6e555d 100644 --- a/projects/amdsmi/docs/reference/amdsmi-py-api.md +++ b/projects/amdsmi/docs/reference/amdsmi-py-api.md @@ -4057,7 +4057,7 @@ try: for dev in device_handles: virtualization_info = amdsmi_interface.amdsmi_get_gpu_virtualization_mode_info(dev) print(virtualization_info['mode']) -except amdsmi_exception.AmdSmiLibraryException as e: +except AmdSmiException as e: print(e) ``` diff --git a/projects/amdsmi/include/amd_smi/amdsmi.h b/projects/amdsmi/include/amd_smi/amdsmi.h index 2597031f9d..ed80f4a40c 100644 --- a/projects/amdsmi/include/amd_smi/amdsmi.h +++ b/projects/amdsmi/include/amd_smi/amdsmi.h @@ -2765,6 +2765,27 @@ amdsmi_status_t amdsmi_get_gpu_subsystem_id(amdsmi_processor_handle processor_ha amdsmi_status_t amdsmi_get_gpu_subsystem_name(amdsmi_processor_handle processor_handle, char *name, size_t len); +/** + * @brief Returns the virtualization mode for the target device. + * + * @ingroup tagIdentQuery + * + * @platform{gpu_bm_linux} @platform{host} + * + * @details The virtualization mode is detected and returned as an enum. + * + * @param[in] processor_handle The identifier of the given device. + * + * @param[in,out] mode Reference to the enum representing virtualization mode. + * - When zero, the virtualization mode is unknown + * - When non-zero, the virtualization mode is detected + * + * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail. + */ +amdsmi_status_t +amdsmi_get_gpu_virtualization_mode(amdsmi_processor_handle processor_handle, + amdsmi_virtualization_mode_t* mode); + /** @} End tagIdentQuery */ /*****************************************************************************/ diff --git a/projects/amdsmi/src/amd_smi/amd_smi.cc b/projects/amdsmi/src/amd_smi/amd_smi.cc index c63d7213a8..0385c87844 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi.cc @@ -3795,6 +3795,7 @@ amdsmi_get_gpu_virtualization_mode(amdsmi_processor_handle processor_handle, amd } struct drm_amdgpu_info_device dev_info = {}; + *mode = AMDSMI_VIRTUALIZATION_MODE_UNKNOWN; amd::smi::AMDSmiGPUDevice* gpu_device = nullptr; amdsmi_status_t r = get_gpu_device_from_handle(processor_handle, &gpu_device); @@ -3819,16 +3820,15 @@ amdsmi_get_gpu_virtualization_mode(amdsmi_processor_handle processor_handle, amd int patch_version = 0; if ((drm_version->version_major <= major_version) && (drm_version->version_minor <= minor_version) && (drm_version->version_patchlevel < patch_version)){ - *mode = AMDSMI_VIRTUALIZATION_MODE_UNKNOWN; + return AMDSMI_STATUS_NOT_SUPPORTED; } - else { - uint32_t ids_flag = (dev_info.ids_flags & AMDGPU_IDS_FLAGS_MODE_MASK) >> AMDGPU_IDS_FLAGS_MODE_SHIFT; - switch (ids_flag){ - case 0: *mode = AMDSMI_VIRTUALIZATION_MODE_BAREMETAL; break; - case 1: *mode = AMDSMI_VIRTUALIZATION_MODE_GUEST; break; - case 2: *mode = AMDSMI_VIRTUALIZATION_MODE_PASSTHROUGH; break; - default: *mode = AMDSMI_VIRTUALIZATION_MODE_UNKNOWN; break; - } + + uint32_t ids_flag = (dev_info.ids_flags & AMDGPU_IDS_FLAGS_MODE_MASK) >> AMDGPU_IDS_FLAGS_MODE_SHIFT; + switch (ids_flag){ + case 0: *mode = AMDSMI_VIRTUALIZATION_MODE_BAREMETAL; break; + case 1: *mode = AMDSMI_VIRTUALIZATION_MODE_GUEST; break; + case 2: *mode = AMDSMI_VIRTUALIZATION_MODE_PASSTHROUGH; break; + default: *mode = AMDSMI_VIRTUALIZATION_MODE_UNKNOWN; break; } free(drm_version); }