From 1ca3e7867e80bec01d55449f74faf7f19fb20403 Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 1 Aug 2018 12:08:35 -0400
Subject: [PATCH] P4 to Git Change 1588185 by vsytchen@vsytchen-win10 on
2018/08/01 11:46:00
SWDEV-145570 - [HIP] Correctly handle calculating the offset when retrieving the amd::Memory object from a prepinned pointer
ReviewBoardURL = http://ocltc.amd.com/reviews/r/15539/diff/
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/hip/hip_memory.cpp#38 edit
[ROCm/hip commit: 83ae8eb381fa6e12104da3c6c5d6ecf0fb31af11]
---
projects/hip/api/hip/hip_memory.cpp | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/projects/hip/api/hip/hip_memory.cpp b/projects/hip/api/hip/hip_memory.cpp
index 7e74820852..d2cb3b7d8c 100644
--- a/projects/hip/api/hip/hip_memory.cpp
+++ b/projects/hip/api/hip/hip_memory.cpp
@@ -38,8 +38,16 @@ extern void getDrvChannelOrderAndType(const enum hipArray_Format Format,
amd::Memory* getMemoryObject(const void* ptr, size_t& offset) {
amd::Memory *memObj = amd::MemObjMap::FindMemObj(ptr);
- if (memObj != nullptr && memObj->getSvmPtr() != nullptr) {
- offset = reinterpret_cast(ptr) - reinterpret_cast(memObj->getSvmPtr());
+ if (memObj != nullptr) {
+ if (memObj->getSvmPtr() != nullptr) {
+ // SVM pointer
+ offset = reinterpret_cast(ptr) - reinterpret_cast(memObj->getSvmPtr());
+ } else if (memObj->getHostMem() != nullptr) {
+ // Prepinned memory
+ offset = reinterpret_cast(ptr) - reinterpret_cast(memObj->getHostMem());
+ } else {
+ ShouldNotReachHere();
+ }
}
return memObj;
}