diff --git a/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp b/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp index e9a4590329..e59e63b0b7 100644 --- a/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp +++ b/projects/clr/rocclr/runtime/device/gpu/gpumemory.cpp @@ -923,6 +923,22 @@ Memory::allocMapTarget( size_t offset = origin[0]; incIndMapCount(); + void *initHostPtr = NULL; + bool failed = false; + + if (!owner()->getSvmPtr()) { + initHostPtr = owner()->getHostMem(); + static const bool forceAllocHostMem = true; + if (NULL == initHostPtr) { + if (!owner()->allocHostMemory(NULL, forceAllocHostMem)) { + failed = true; + } + } + } + else { + owner()->commitSvmMemory(); + initHostPtr = owner()->getSvmPtr(); + } // If host memory exists, use it if ((owner()->getHostMem() != NULL) && isDirectMap()) { @@ -954,7 +970,7 @@ Memory::allocMapTarget( amd::Memory* memory = NULL; // Search for a possible indirect resource //For SVM implementation, we cannot use cached map. if svm space, use the svm host pointer - void *initHostPtr = owner()->getSvmPtr(); + cl_mem_flags flag = 0; bool canBeCached = true; if (NULL != initHostPtr) { diff --git a/projects/clr/rocclr/runtime/device/gpu/gpuresource.cpp b/projects/clr/rocclr/runtime/device/gpu/gpuresource.cpp index a1e5db9988..d86b5e0263 100644 --- a/projects/clr/rocclr/runtime/device/gpu/gpuresource.cpp +++ b/projects/clr/rocclr/runtime/device/gpu/gpuresource.cpp @@ -346,7 +346,7 @@ Resource::create(MemoryType memType, CreateParams* params, bool heap) desc.vaBase = 0; desc.minAlignment = 0; desc.section = GSL_SECTION_REGULAR; - if (NULL != params && NULL != params->owner_) { //make sure params not NULL + if (NULL != params && NULL != params->owner_ && memType != Pinned) { //make sure params not NULL mcaddr svmPtr = reinterpret_cast(params->owner_->getSvmPtr()); desc.vaBase = (svmPtr == 1)? 0:svmPtr; cal_.SVMRes_ = (svmPtr != 0);