mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
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:
committed by
Compute-Runtime-Automation
parent
af57d2bd38
commit
5d3f82a8a5
@@ -171,7 +171,7 @@ typedef struct __GMM_GFX_PARTITIONING {
|
||||
Reserved0,
|
||||
Reserved1,
|
||||
SVM,
|
||||
Reserved2,
|
||||
TR,
|
||||
Heap32[4];
|
||||
} GMM_GFX_PARTITIONING;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user