diff --git a/rocclr/runtime/device/gpu/gpukernel.cpp b/rocclr/runtime/device/gpu/gpukernel.cpp index 46a11f5a01..780d458ba9 100644 --- a/rocclr/runtime/device/gpu/gpukernel.cpp +++ b/rocclr/runtime/device/gpu/gpukernel.cpp @@ -3850,6 +3850,7 @@ HSAILKernel::loadArguments( mem = amd::SvmManager::FindSvmBuffer(*reinterpret_cast(paramaddr)); if (mem != NULL) { gpuMem = dev().getGpuMemory(mem); + gpuMem->wait(gpu, WaitOnBusyEngine); memList.push_back(gpuMem); } else { @@ -3861,10 +3862,10 @@ HSAILKernel::loadArguments( gpuMem = *reinterpret_cast(paramaddr); } else { - mem = *reinterpret_cast(paramaddr); - if (mem != NULL) { - gpuMem = dev().getGpuMemory(mem); - } + mem = *reinterpret_cast(paramaddr); + if (mem != NULL) { + gpuMem = dev().getGpuMemory(mem); + } } if (gpuMem == NULL) { WriteAqlArg(&aqlArgBuf, &gpuMem, sizeof(void*)); diff --git a/rocclr/runtime/device/gpu/gpuvirtual.cpp b/rocclr/runtime/device/gpu/gpuvirtual.cpp index 9a4497be2c..dcb73b18a8 100644 --- a/rocclr/runtime/device/gpu/gpuvirtual.cpp +++ b/rocclr/runtime/device/gpu/gpuvirtual.cpp @@ -3280,13 +3280,18 @@ VirtualGPU::processMemObjectsHSA( const HSAILKernel::Argument* arg = hsaKernel.argument(i); Memory* memory = NULL; bool readOnly = false; + amd::Memory* svmMem = NULL; // Find if current argument is a buffer if ((desc.type_ == T_POINTER) && (arg->addrQual_ != HSAIL_ADDRESS_LOCAL)) { if (kernelParams.boundToSvmPointer(dev(), params, i)) { - //!\todo Do we have to sync cache coherency or wait for SDMA? - flushL1Cache(); - break; + svmMem = amd::SvmManager::FindSvmBuffer( + *reinterpret_cast(params + desc.offset_)); + if (!svmMem) { + //!\todo Do we have to sync cache coherency or wait for SDMA? + flushL1Cache(); + break; + } } if (nativeMem) { @@ -3294,8 +3299,6 @@ VirtualGPU::processMemObjectsHSA( } else if (*reinterpret_cast (params + desc.offset_) != NULL) { - amd::Memory* svmMem = amd::SvmManager::FindSvmBuffer( - *reinterpret_cast(params + desc.offset_)); if (NULL == svmMem) { memory = dev().getGpuMemory(*reinterpret_cast (params + desc.offset_));