Taking into account additionals heaps in gpu VA reservation in WSL

Related-To: NEO-7337

Signed-off-by: Kamil Diedrich <kamil.diedrich@intel.com>
This commit is contained in:
Kamil Diedrich
2022-09-19 23:21:51 +02:00
committed by Compute-Runtime-Automation
parent af57d2bd38
commit 5d3f82a8a5
4 changed files with 39 additions and 3 deletions

View File

@@ -171,7 +171,7 @@ typedef struct __GMM_GFX_PARTITIONING {
Reserved0,
Reserved1,
SVM,
Reserved2,
TR,
Heap32[4];
} GMM_GFX_PARTITIONING;

View File

@@ -200,12 +200,18 @@ bool Wddm::configureDeviceAddressSpace() {
return false;
}
if (gfxPartition.Standard64KB.Limit <= maxUsmSize) {
uintptr_t usmLowPartMax = gfxPartition.Heap32[0].Base;
for (const auto &usmMaxAddr : {gfxPartition.Standard.Base, gfxPartition.Standard64KB.Base, gfxPartition.TR.Base}) {
if (usmMaxAddr != 0) {
usmLowPartMax = std::min(usmLowPartMax, usmMaxAddr);
}
}
// reserved cpu address range splits USM into 2 partitions
struct {
uint64_t minAddr;
uint64_t maxAddr;
} usmRanges[] = {{usmBase, gfxPartition.Heap32->Base},
{gfxPartition.Standard64KB.Limit, maxUsmSize}};
} usmRanges[] = {{usmBase, usmLowPartMax},
{alignUp(gfxPartition.Standard64KB.Limit, MemoryConstants::pageSize64k), maxUsmSize}};
bool usmGpuRangeIsReserved = true;
for (const auto &usmRange : usmRanges) {

View File

@@ -2671,6 +2671,35 @@ struct Demarshaller<TOK_S_GMM_GFX_PARTITIONING> {
}
WCH_ASSERT(tokSVM == tokSVMEnd);
} break;
case TOK_FS_GMM_GFX_PARTITIONING__TR: {
const TokenHeader *tokTR = varLen->getValue<TokenHeader>();
const TokenHeader *tokTREnd = varLen->getValue<TokenHeader>() + varLen->valueLengthInBytes / sizeof(TokenHeader);
while (tokTR < tokTREnd) {
if (false == tokTR->flags.flag4IsVariableLength) {
switch (tokTR->id) {
default:
if (tokTR->flags.flag3IsMandatory) {
return false;
}
break;
case TOK_FBQ_GMM_GFX_PARTITIONING__ANONYMOUS7117__BASE: {
dst.TR.Base = readTokValue<decltype(dst.TR.Base)>(*tokTR);
} break;
case TOK_FBQ_GMM_GFX_PARTITIONING__ANONYMOUS7117__LIMIT: {
dst.TR.Limit = readTokValue<decltype(dst.TR.Limit)>(*tokTR);
} break;
};
tokTR = tokTR + 1 + tokTR->valueDwordCount;
} else {
auto varLen = reinterpret_cast<const TokenVariableLength *>(tokTR);
if (tokTR->flags.flag3IsMandatory) {
return false;
}
tokTR = tokTR + sizeof(TokenVariableLength) / sizeof(uint32_t) + varLen->valuePaddedSizeInDwords;
}
}
WCH_ASSERT(tokTR == tokTREnd);
} break;
case TOK_FS_GMM_GFX_PARTITIONING__HEAP32: {
uint32_t arrayElementIdHeap32 = varLen->arrayElementId;
const TokenHeader *tokHeap32 = varLen->getValue<TokenHeader>();

View File

@@ -593,6 +593,7 @@ enum TOK : uint32_t {
TOK_FS_GMM_GFX_PARTITIONING__STANDARD = 3534,
TOK_FS_GMM_GFX_PARTITIONING__STANDARD64KB = 3535,
TOK_FS_GMM_GFX_PARTITIONING__SVM = 3538,
TOK_FS_GMM_GFX_PARTITIONING__TR = 3539,
TOK_FS_GMM_GFX_PARTITIONING__HEAP32 = 3540,
TOK_FBD_ADAPTER_BDF___ANONYMOUS8173__ANONYMOUS8193__BUS = 3541,
TOK_FBD_ADAPTER_BDF___ANONYMOUS8173__ANONYMOUS8193__DEVICE = 3542,