2
0

SWDEV-565300: Fix coherency range mode in mem pool pointers (#2296)

Signed-off-by: sdashmiz <shadi.dashmiz@amd.com>
Este cometimento está contido em:
Shadi Dashmiz
2026-01-05 11:33:11 -05:00
cometido por GitHub
ascendente 53fd27c0ed
cometimento 2789ea429a
+13 -2
Ver ficheiro
@@ -2514,8 +2514,8 @@ bool Device::SetSvmAttributes(const void* dev_ptr, size_t count, amd::MemoryAdvi
// ================================================================================================
bool Device::GetSvmAttributes(void** data, size_t* data_sizes, int* attributes,
size_t num_attributes, const void* dev_ptr, size_t count) const {
amd::Memory* svm_mem = amd::MemObjMap::FindMemObj(dev_ptr);
if (settings().hmmFlags_ & Settings::Hmm::EnableSvmTracking) {
amd::Memory* svm_mem = amd::MemObjMap::FindMemObj(dev_ptr);
if ((nullptr == svm_mem) || ((svm_mem->getMemFlags() & CL_MEM_ALLOC_HOST_PTR) == 0) ||
// Validate the range of provided memory
((svm_mem->getSize() - (reinterpret_cast<const_address>(dev_ptr) -
@@ -2548,6 +2548,14 @@ bool Device::GetSvmAttributes(void** data, size_t* data_sizes, int* attributes,
*reinterpret_cast<uint32_t*>(data[i]) = HSA_AMD_SVM_GLOBAL_FLAG_FINE_GRAINED;
}
}
// If coherency is still indeterminate
if (ptr_info.type == HSA_EXT_POINTER_TYPE_HSA_VMEM) {
if (svm_mem != nullptr && (svm_mem->getMemFlags() & CL_MEM_SVM_FINE_GRAIN_BUFFER)) {
*reinterpret_cast<uint32_t*>(data[i]) = HSA_AMD_SVM_GLOBAL_FLAG_FINE_GRAINED;
} else {
*reinterpret_cast<uint32_t*>(data[i]) = HSA_AMD_SVM_GLOBAL_FLAG_COARSE_GRAINED;
}
}
}
}
@@ -2588,7 +2596,10 @@ bool Device::GetSvmAttributes(void** data, size_t* data_sizes, int* attributes,
break;
}
}
// Only call svm_attributes_get if there are SVM attributes to query
if (attr.empty()) {
return true;
}
hsa_status_t status =
Hsa::svm_attributes_get(const_cast<void*>(dev_ptr), count, attr.data(), attr.size());
if (status != HSA_STATUS_SUCCESS) {