diff --git a/rocclr/device/rocm/rocmemory.cpp b/rocclr/device/rocm/rocmemory.cpp index bee2110c43..a886446042 100644 --- a/rocclr/device/rocm/rocmemory.cpp +++ b/rocclr/device/rocm/rocmemory.cpp @@ -788,6 +788,10 @@ bool Buffer::create(bool alloc_local) { return false; } + // Update the size of memory object to size of handle, since the setting the size to the actual + // physical memory allocated would block the address range during amd::MemObjMap::FindMemObj() + // lookup. This might cause address range issue in virtual address space. + owner()->UpdatePhysMemSize(); owner()->setSvmPtr(reinterpret_cast(owner()->getUserData().hsa_handle)); return true; diff --git a/rocclr/platform/memory.hpp b/rocclr/platform/memory.hpp index a19e2660c6..cdd3f4ff3a 100644 --- a/rocclr/platform/memory.hpp +++ b/rocclr/platform/memory.hpp @@ -254,7 +254,6 @@ class Memory : public amd::RuntimeObject { //! Initializes the device memory array virtual void initDeviceMemory(); - void setSize(size_t size) { size_ = size; } void setInteropObj(InteropObject* obj) { interopObj_ = obj; } @@ -339,6 +338,13 @@ class Memory : public amd::RuntimeObject { Flags getMemFlags() const { return flags_; } Type getType() const { return type_; } + //! Update phys mem size to the handle, only when the ROCCLR_MEM_PHYSMEM flag is set. + void UpdatePhysMemSize() { + if (flags_ & ROCCLR_MEM_PHYMEM) { + size_ = sizeof(getUserData().hsa_handle); + } + } + const Device* getLastWriter() { return lastWriter_; } const HostMemoryReference* getHostMemRef() const { return &hostMemRef_; } void* getHostMem() const { return hostMemRef_.hostMem(); }