SWDEV-489255 - Update stack size limit in rocvirtual
Change-Id: I2aac9d211f64b3d6c121d8b010d215dcbdeac3aa
This commit is contained in:
@@ -938,12 +938,7 @@ bool Device::disableP2P(amd::Device* ptrDev) {
|
||||
}
|
||||
|
||||
bool Device::UpdateStackSize(uint64_t stackSize) {
|
||||
// Amount of space used by each wave is in units of 256 dwords.
|
||||
// As per COMPUTE_TMPRING_SIZE.WAVE_SIZE 24:12
|
||||
// The field size supports a range of 0->(2M-256) dwords per wave64.
|
||||
// Per lane this works out to 131056 bytes or 128K - 16
|
||||
uint64_t kStackSize = ((128 * Ki) - 16);
|
||||
if (stackSize > kStackSize) {
|
||||
if (stackSize > kMaxStackSize) {
|
||||
return false;
|
||||
}
|
||||
stack_size_ = amd::alignUp(stackSize, 16);
|
||||
|
||||
@@ -1653,6 +1653,12 @@ class Device : public RuntimeObject {
|
||||
static constexpr size_t kMGInfoSizePerDevice = kMGSyncDataSize + sizeof(MGSyncInfo);
|
||||
static constexpr size_t kSGInfoSize = kMGSyncDataSize;
|
||||
|
||||
// Amount of space used by each wave is in units of 256 dwords.
|
||||
// As per COMPUTE_TMPRING_SIZE.WAVE_SIZE 24:12
|
||||
// The field size supports a range of 0->(2M-256) dwords per wave64.
|
||||
// Per lane this works out to 131056 bytes or 128K - 16
|
||||
static constexpr size_t kMaxStackSize = ((128 * Ki) - 16);
|
||||
|
||||
typedef std::list<CommandQueue*> CommandQueues;
|
||||
|
||||
struct BlitProgram : public amd::HeapObject {
|
||||
|
||||
@@ -3479,11 +3479,9 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes,
|
||||
dispatchPacket.private_segment_size = devKernel->workGroupInfo()->privateMemSize_;
|
||||
|
||||
if ((devKernel->workGroupInfo()->usedStackSize_ & 0x1) == 0x1) {
|
||||
dispatchPacket.private_segment_size =
|
||||
std::max<uint64_t>(dev().StackSize(), dispatchPacket.private_segment_size);
|
||||
if (dispatchPacket.private_segment_size > 16 * Ki) {
|
||||
dispatchPacket.private_segment_size = 16 * Ki;
|
||||
}
|
||||
dispatchPacket.private_segment_size = std::min<uint64_t>(
|
||||
std::max<uint64_t>(dev().StackSize(), dispatchPacket.private_segment_size),
|
||||
Device::kMaxStackSize);
|
||||
}
|
||||
|
||||
// Pass the header accordingly
|
||||
|
||||
Reference in New Issue
Block a user