From 4df031b52ae668edf9077f07ed397c578e5ca787 Mon Sep 17 00:00:00 2001
From: Edgar Gabriel <edgar.gabriel@amd.com>
Date: Fri, 29 Apr 2022 12:08:33 -0500
Subject: [PATCH] UCT/ROCM: fix memory type detection

fix the approach used to identify ROCm memory type. ROCm memory type
is as of right now of type HSA_EXT_POINTER_TYPE_HSA with the owner agent being a GPU.
---
 src/uct/rocm/base/rocm_base.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/uct/rocm/base/rocm_base.c b/src/uct/rocm/base/rocm_base.c
index 578375eccc00..f2946562b12e 100644
--- a/src/uct/rocm/base/rocm_base.c
+++ b/src/uct/rocm/base/rocm_base.c
@@ -185,8 +185,15 @@ ucs_status_t uct_rocm_base_detect_memory_type(uct_md_h md, const void *addr,
     info.size = sizeof(hsa_amd_pointer_info_t);
     status = hsa_amd_pointer_info((void*)addr, &info, NULL, NULL, NULL);
     if ((status == HSA_STATUS_SUCCESS) &&
-        (info.type != HSA_EXT_POINTER_TYPE_UNKNOWN)) {
-        *mem_type_p = UCS_MEMORY_TYPE_ROCM;
+        (info.type == HSA_EXT_POINTER_TYPE_HSA)) {
+        hsa_device_type_t dev_type;
+
+        status = hsa_agent_get_info(info.agentOwner, HSA_AGENT_INFO_DEVICE, &dev_type);
+        if ((status == HSA_STATUS_SUCCESS) &&
+            (dev_type == HSA_DEVICE_TYPE_GPU)) {
+	    *mem_type_p = UCS_MEMORY_TYPE_ROCM;
+            return UCS_OK;
+        }
     }
 
     return UCS_OK;