From 58e4bca4494185d8b1e97e808ddd97eeef95ab14 Mon Sep 17 00:00:00 2001 From: foreman Date: Fri, 15 Nov 2019 16:38:27 -0500 Subject: [PATCH] P4 to Git Change 2031605 by gandryey@gera-win10 on 2019/11/15 16:34:08 SWDEV-79445 - OCL generic changes and code clean-up - Make sure transfer doesn't exceed CP dma limit Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.cpp#81 edit --- rocclr/runtime/device/pal/palresource.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/rocclr/runtime/device/pal/palresource.cpp b/rocclr/runtime/device/pal/palresource.cpp index 79166b9cb5..4b703690bf 100644 --- a/rocclr/runtime/device/pal/palresource.cpp +++ b/rocclr/runtime/device/pal/palresource.cpp @@ -1471,7 +1471,22 @@ bool Resource::partialMemCopyTo(VirtualGPU& gpu, const amd::Coord3D& srcOrigin, copyRegion.srcOffset = srcOrigin[0] + offset(); copyRegion.dstOffset = dstOrigin[0] + dstResource.offset(); copyRegion.copySize = size[0]; - gpu.iCmd()->CmdCopyMemory(*iMem(), *dstResource.iMem(), 1, ©Region); + constexpr size_t CpCopySizeLimit = (1 << 26) - sizeof(uint64_t); + if (dev().settings().disableSdma_ && (size[0] > CpCopySizeLimit)) { + size_t orgSize = size[0]; + copyRegion.copySize = CpCopySizeLimit; + do { + gpu.iCmd()->CmdCopyMemory(*iMem(), *dstResource.iMem(), 1, ©Region); + copyRegion.srcOffset += CpCopySizeLimit; + copyRegion.dstOffset += CpCopySizeLimit; + orgSize -= (orgSize > CpCopySizeLimit) ? CpCopySizeLimit : orgSize; + if (orgSize < CpCopySizeLimit) { + copyRegion.copySize = orgSize; + } + } while (orgSize > 0); + } else { + gpu.iCmd()->CmdCopyMemory(*iMem(), *dstResource.iMem(), 1, ©Region); + } } }