Skip to content

Commit 8a85a96

Browse files
feature: Add 3-level wait scheme with tpause intrinsic
Related-To: NEO-14336 Signed-off-by: Lukasz Jobczyk <[email protected]>
1 parent 4e9afb3 commit 8a85a96

File tree

22 files changed

+252
-103
lines changed

22 files changed

+252
-103
lines changed

level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1655,7 +1655,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::synchronizeInOrderExe
16551655
const uint64_t *hostAddress = ptrOffset(inOrderExecInfo->getBaseHostAddress(), inOrderExecInfo->getAllocationOffset());
16561656

16571657
for (uint32_t i = 0; i < inOrderExecInfo->getNumHostPartitionsToWait(); i++) {
1658-
if (!NEO::WaitUtils::waitFunctionWithPredicate<const uint64_t>(hostAddress, waitValue, std::greater_equal<uint64_t>())) {
1658+
if (!NEO::WaitUtils::waitFunctionWithPredicate<const uint64_t>(hostAddress, waitValue, std::greater_equal<uint64_t>(), timeDiff / 1000)) {
16591659
signaled = false;
16601660
break;
16611661
}

level_zero/core/source/event/event_impl.inl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ ze_result_t EventImp<TagSizeT>::queryCounterBasedEventStatus() {
268268
bool signaled = true;
269269
const uint64_t *hostAddress = ptrOffset(inOrderExecInfo->getBaseHostAddress(), this->inOrderAllocationOffset);
270270
for (uint32_t i = 0; i < inOrderExecInfo->getNumHostPartitionsToWait(); i++) {
271-
if (!NEO::WaitUtils::waitFunctionWithPredicate<const uint64_t>(hostAddress, waitValue, std::greater_equal<uint64_t>())) {
271+
if (!NEO::WaitUtils::waitFunctionWithPredicate<const uint64_t>(hostAddress, waitValue, std::greater_equal<uint64_t>(), 0)) {
272272
signaled = false;
273273
break;
274274
}
@@ -362,7 +362,8 @@ ze_result_t EventImp<TagSizeT>::queryStatusEventPackets() {
362362
bool ready = NEO::WaitUtils::waitFunctionWithPredicate<const TagSizeT>(
363363
static_cast<TagSizeT const *>(queryAddress),
364364
queryVal,
365-
std::not_equal_to<TagSizeT>());
365+
std::not_equal_to<TagSizeT>(),
366+
0);
366367
if (!ready) {
367368
return ZE_RESULT_NOT_READY;
368369
}
@@ -378,7 +379,8 @@ ze_result_t EventImp<TagSizeT>::queryStatusEventPackets() {
378379
bool ready = NEO::WaitUtils::waitFunctionWithPredicate<const TagSizeT>(
379380
static_cast<TagSizeT const *>(queryAddress),
380381
queryVal,
381-
std::not_equal_to<TagSizeT>());
382+
std::not_equal_to<TagSizeT>(),
383+
0);
382384
if (!ready) {
383385
return ZE_RESULT_NOT_READY;
384386
}

level_zero/core/test/unit_tests/sources/fence/test_fence.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2024 Intel Corporation
2+
* Copyright (C) 2020-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -241,7 +241,7 @@ TEST_F(FenceSynchronizeTest, givenInfiniteTimeoutWhenWaitingForFenceCompletionTh
241241
constexpr uint32_t activePartitions = 2;
242242
constexpr uint32_t postSyncOffset = 16;
243243

244-
VariableBackup<bool> backupWaitpkgUse(&NEO::WaitUtils::waitpkgUse, false);
244+
VariableBackup<WaitUtils::WaitpkgUse> backupWaitpkgUse(&WaitUtils::waitpkgUse, WaitUtils::WaitpkgUse::noUse);
245245
VariableBackup<uint32_t> backupWaitCount(&NEO::WaitUtils::waitCount, 1);
246246

247247
const auto csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());

opencl/source/command_queue/command_queue_hw_base.inl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2019-2024 Intel Corporation
2+
* Copyright (C) 2019-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -148,15 +148,19 @@ inline bool waitForTimestampsWithinContainer(TimestampPacketContainer *container
148148

149149
if (container) {
150150
auto lastHangCheckTime = std::chrono::high_resolution_clock::now();
151+
auto waitStartTime = lastHangCheckTime;
151152
for (const auto &timestamp : container->peekNodes()) {
152153
for (uint32_t i = 0; i < timestamp->getPacketsUsed(); i++) {
153154
if (printWaitForCompletion) {
154155
printf("\nWaiting for TS 0x%" PRIx64, timestamp->getGpuAddress() + (i * timestamp->getSinglePacketSize()));
155156
}
156157
while (timestamp->getContextEndValue(i) == 1) {
157158
csr.downloadAllocation(*timestamp->getBaseGraphicsAllocation()->getGraphicsAllocation(csr.getRootDeviceIndex()));
158-
WaitUtils::waitFunctionWithPredicate<const TSPacketType>(static_cast<TSPacketType const *>(timestamp->getContextEndAddress(i)), 1u, std::not_equal_to<TSPacketType>());
159-
if (csr.checkGpuHangDetected(std::chrono::high_resolution_clock::now(), lastHangCheckTime)) {
159+
160+
auto currentTime = std::chrono::high_resolution_clock::now();
161+
WaitUtils::waitFunctionWithPredicate<const TSPacketType>(static_cast<TSPacketType const *>(timestamp->getContextEndAddress(i)), 1u, std::not_equal_to<TSPacketType>(), std::chrono::duration_cast<std::chrono::microseconds>(currentTime - waitStartTime).count());
162+
163+
if (csr.checkGpuHangDetected(currentTime, lastHangCheckTime)) {
160164
status = WaitStatus::gpuHang;
161165
if (printWaitForCompletion) {
162166
printf("\nWaiting for TS failed");

opencl/test/unit_test/api/cl_enqueue_unmap_mem_object_tests.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2024 Intel Corporation
2+
* Copyright (C) 2018-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -82,7 +82,7 @@ TEST_F(ClEnqueueUnmapMemObjTests, givenInvalidAddressWhenUnmappingOnCpuThenRetur
8282
TEST_F(ClEnqueueUnmapMemObjTests, givenZeroCopyWithoutCoherencyAllowedWhenMapAndUnmapThenFlushCachelines) {
8383
DebugManagerStateRestore restorer;
8484
debugManager.flags.AllowZeroCopyWithoutCoherency.set(1);
85-
VariableBackup<bool> backupWaitpkgUse(&WaitUtils::waitpkgUse, false);
85+
VariableBackup<WaitUtils::WaitpkgUse> backupWaitpkgUse(&WaitUtils::waitpkgUse, WaitUtils::WaitpkgUse::noUse);
8686
VariableBackup<uint32_t> backupWaitCount(&WaitUtils::waitCount, 1);
8787

8888
auto buffer = std::unique_ptr<Buffer>(BufferHelper<BufferAllocHostPtr<>>::create(pContext));

opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_4_tests.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2024 Intel Corporation
2+
* Copyright (C) 2018-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -805,7 +805,7 @@ extern TaskCountType pauseValue;
805805
HWTEST_F(CommandStreamReceiverFlushTaskTests, givenTagValueNotMeetingTaskCountToWaitWhenTagValueSwitchesThenWaitFunctionReturnsTrue) {
806806
VariableBackup<volatile TagAddressType *> backupPauseAddress(&CpuIntrinsicsTests::pauseAddress);
807807
VariableBackup<TaskCountType> backupPauseValue(&CpuIntrinsicsTests::pauseValue);
808-
VariableBackup<bool> backupWaitpkgUse(&WaitUtils::waitpkgUse, false);
808+
VariableBackup<WaitUtils::WaitpkgUse> backupWaitpkgUse(&WaitUtils::waitpkgUse, WaitUtils::WaitpkgUse::noUse);
809809
VariableBackup<uint32_t> backupWaitCount(&WaitUtils::waitCount, 1);
810810

811811
auto mockCsr = new MockCsrHw2<FamilyType>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield());
@@ -825,7 +825,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenTagValueNotMeetingTaskCountTo
825825
HWTEST_F(CommandStreamReceiverFlushTaskTests, givenTagValueNotMeetingTaskCountToWaitAndIndefinitelyPollWhenWaitForCompletionThenDoNotCallWaitUtils) {
826826
VariableBackup<volatile TagAddressType *> backupPauseAddress(&CpuIntrinsicsTests::pauseAddress);
827827
VariableBackup<TaskCountType> backupPauseValue(&CpuIntrinsicsTests::pauseValue);
828-
VariableBackup<bool> backupWaitpkgUse(&WaitUtils::waitpkgUse, false);
828+
VariableBackup<WaitUtils::WaitpkgUse> backupWaitpkgUse(&WaitUtils::waitpkgUse, WaitUtils::WaitpkgUse::noUse);
829829
VariableBackup<uint32_t> backupWaitCount(&WaitUtils::waitCount, 1);
830830

831831
auto mockCsr = new MockCsrHw2<FamilyType>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield());

opencl/test/unit_test/helpers/timestamp_packet_1_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1113,7 +1113,7 @@ extern std::function<void()> setupPauseAddress;
11131113
} // namespace CpuIntrinsicsTests
11141114

11151115
HWTEST_F(TimestampPacketTests, givenEnableTimestampWaitForQueuesWhenFinishThenCallWaitUtils) {
1116-
VariableBackup<bool> backupWaitpkgUse(&WaitUtils::waitpkgUse, false);
1116+
VariableBackup<WaitUtils::WaitpkgUse> backupWaitpkgUse(&WaitUtils::waitpkgUse, WaitUtils::WaitpkgUse::noUse);
11171117
VariableBackup<uint32_t> backupWaitCount(&WaitUtils::waitCount, 1);
11181118

11191119
DebugManagerStateRestore restorer;

shared/source/command_stream/command_stream_receiver.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -504,10 +504,10 @@ WaitStatus CommandStreamReceiver::baseWaitFunction(volatile TagAddressType *poll
504504
waitStartTime = std::chrono::high_resolution_clock::now();
505505
lastHangCheckTime = waitStartTime;
506506
for (uint32_t i = 0; i < activePartitions; i++) {
507-
while (*partitionAddress < taskCountToWait && timeDiff <= params.waitTimeout) {
507+
while (*partitionAddress < taskCountToWait && (!params.enableTimeout || timeDiff <= params.waitTimeout)) {
508508
this->downloadTagAllocation(taskCountToWait);
509509

510-
if (!params.indefinitelyPoll && WaitUtils::waitFunction(partitionAddress, taskCountToWait)) {
510+
if (!params.indefinitelyPoll && WaitUtils::waitFunction(partitionAddress, taskCountToWait, timeDiff)) {
511511
break;
512512
}
513513

@@ -516,9 +516,7 @@ WaitStatus CommandStreamReceiver::baseWaitFunction(volatile TagAddressType *poll
516516
return WaitStatus::gpuHang;
517517
}
518518

519-
if (params.enableTimeout) {
520-
timeDiff = std::chrono::duration_cast<std::chrono::microseconds>(currentTime - waitStartTime).count();
521-
}
519+
timeDiff = std::chrono::duration_cast<std::chrono::microseconds>(currentTime - waitStartTime).count();
522520
}
523521

524522
partitionAddress = ptrOffset(partitionAddress, this->immWritePostSyncWriteOffset);
@@ -1047,7 +1045,7 @@ void CommandStreamReceiver::downloadTagAllocation(TaskCountType taskCountToWait)
10471045
bool CommandStreamReceiver::testTaskCountReady(volatile TagAddressType *pollAddress, TaskCountType taskCountToWait) {
10481046
this->downloadTagAllocation(taskCountToWait);
10491047
for (uint32_t i = 0; i < activePartitions; i++) {
1050-
if (!WaitUtils::waitFunction(pollAddress, taskCountToWait)) {
1048+
if (!WaitUtils::waitFunction(pollAddress, taskCountToWait, 0)) {
10511049
return false;
10521050
}
10531051

shared/source/command_stream/command_stream_receiver_hw_base.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1434,7 +1434,7 @@ inline bool CommandStreamReceiverHw<GfxFamily>::initDirectSubmission() {
14341434
this->osContext->setDirectSubmissionActive();
14351435
if (this->osContext->isDirectSubmissionLightActive()) {
14361436
this->pushAllocationsForMakeResident = false;
1437-
WaitUtils::init(true);
1437+
WaitUtils::init(WaitUtils::WaitpkgUse::umonitorAndUmwait);
14381438
}
14391439
}
14401440
}

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,9 @@ DECLARE_DEBUG_VARIABLE(int64_t, OverrideMultiStoragePlacement, -1, "Place memory
108108
DECLARE_DEBUG_VARIABLE(int64_t, ForceCompressionDisabledForCompressedBlitCopies, -1, "If compression is required, set AUX_CCS_E, but force CompressionEnable filed; 0 should result in uncompressed read/write; values = -1: default, 0: disabled, 1: enabled")
109109
DECLARE_DEBUG_VARIABLE(int64_t, WddmPagingFenceCpuWaitDelayTime, 0, "Amount of microseconds after waiting for paging fence on CPU")
110110
DECLARE_DEBUG_VARIABLE(int64_t, OverrideEventSynchronizeTimeout, -1, "-1: default - user provided timeout value, >0: timeout in nanoseconds")
111-
DECLARE_DEBUG_VARIABLE(int64_t, WaitpkgCounterValue, -1, "-1: use default, >=0: use constant value added for umwait counter")
111+
DECLARE_DEBUG_VARIABLE(int64_t, WaitpkgCounterValue, -1, "-1: use default, >=0: use constant value added for umwait or tpause counter")
112112
DECLARE_DEBUG_VARIABLE(int32_t, WaitpkgControlValue, -1, "-1: use default, 0: slower wakeup - larger power savings, 1: faster wakeup - smaller power savings")
113+
DECLARE_DEBUG_VARIABLE(int32_t, WaitpkgThreshold, -1, "-1: use default, >=0: When waitpkg in tpause mode, apply tpause waits after given threshold in us")
113114
DECLARE_DEBUG_VARIABLE(int32_t, ForceL1Caching, -1, "Program L1 cache policy for surface state and stateless accesses; values = -1: default, 0: disable, 1: enable")
114115
DECLARE_DEBUG_VARIABLE(int32_t, ForceAuxTranslationEnabled, -1, "Require AUX translation for kernels; values = -1: default, 0: disabled, 1: enabled")
115116
DECLARE_DEBUG_VARIABLE(int32_t, OverrideStatelessMocsIndex, -1, "Program provided MOCS index for stateless accesses in state base address for regular buffers; ignore when -1")
@@ -534,7 +535,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, UseExternalAllocatorForSshAndDsh, -1, "Use 32 bi
534535
DECLARE_DEBUG_VARIABLE(int32_t, OverrideSlmSize, -1, "Force per subslice slm size in KB; ignore when -1")
535536
DECLARE_DEBUG_VARIABLE(int32_t, UseCyclesPerSecondTimer, 0, "0: default behavior, 0: disabled: Report L0 timer in nanosecond units, 1: enabled: Report L0 timer in cycles per second")
536537
DECLARE_DEBUG_VARIABLE(int32_t, WaitLoopCount, -1, "-1: use default, >=0: number of iterations in wait loop")
537-
DECLARE_DEBUG_VARIABLE(int32_t, EnableWaitpkg, -1, "-1: use default, 0: disable, 1: enable")
538+
DECLARE_DEBUG_VARIABLE(int32_t, EnableWaitpkg, -1, "-1: use default, 0: disable, 1: UMONITOR/UMWAIT 2: TPAUSE")
538539
DECLARE_DEBUG_VARIABLE(int32_t, GTPinAllocateBufferInSharedMemory, -1, "Force GTPin to allocate buffer in shared memory")
539540
DECLARE_DEBUG_VARIABLE(int32_t, AlignLocalMemoryVaTo2MB, -1, "Allow 2MB pages for allocations with size>=2MB. On Linux it means aligned VA, on Windows it means aligned size. -1: default, 0: disabled, 1: enabled")
540541
DECLARE_DEBUG_VARIABLE(int32_t, EnableUserFenceForCompletionWait, -1, "-1: default (disabled), 0: disable, 1: enable : Use Wait User Fence instead Gem Wait")

shared/source/direct_submission/linux/drm_direct_submission.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,10 @@ bool DrmDirectSubmission<GfxFamily, Dispatcher>::isCompletionFenceSupported() {
288288
template <typename GfxFamily, typename Dispatcher>
289289
void DrmDirectSubmission<GfxFamily, Dispatcher>::wait(TaskCountType taskCountToWait) {
290290
auto lastHangCheckTime = std::chrono::high_resolution_clock::now();
291+
auto waitStartTime = lastHangCheckTime;
291292
auto pollAddress = this->tagAddress;
292293
for (uint32_t i = 0; i < this->activeTiles; i++) {
293-
while (!WaitUtils::waitFunction(pollAddress, taskCountToWait) &&
294+
while (!WaitUtils::waitFunction(pollAddress, taskCountToWait, std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - waitStartTime).count()) &&
294295
!isGpuHangDetected(lastHangCheckTime)) {
295296
}
296297
pollAddress = ptrOffset(pollAddress, this->immWritePostSyncOffset);

shared/source/execution_environment/execution_environment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
namespace NEO {
3232
ExecutionEnvironment::ExecutionEnvironment() {
33-
WaitUtils::init(false);
33+
WaitUtils::init(WaitUtils::WaitpkgUse::noUse);
3434
this->configureNeoEnvironment();
3535
}
3636

shared/source/utilities/cpuintrinsics.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ void pause() {
4949
_mm_pause();
5050
}
5151

52+
uint8_t tpause(uint32_t control, uint64_t counter) {
53+
#ifdef SUPPORTS_WAITPKG
54+
return _tpause(control, counter);
55+
#else
56+
return 0;
57+
#endif
58+
}
59+
5260
unsigned char umwait(unsigned int ctrl, uint64_t counter) {
5361
#ifdef SUPPORTS_WAITPKG
5462
return _umwait(ctrl, counter);

shared/source/utilities/cpuintrinsics.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2023 Intel Corporation
2+
* Copyright (C) 2020-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -20,6 +20,8 @@ void clFlushOpt(void *ptr);
2020

2121
void pause();
2222

23+
uint8_t tpause(uint32_t control, uint64_t counter);
24+
2325
unsigned char umwait(unsigned int ctrl, uint64_t counter);
2426

2527
void umonitor(void *a);

shared/source/utilities/wait_util.cpp

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,47 +14,53 @@ namespace NEO {
1414

1515
namespace WaitUtils {
1616

17+
WaitpkgUse waitpkgUse = WaitpkgUse::uninitialized;
18+
19+
int64_t waitPkgThresholdInMicroSeconds = defaultWaitPkgThresholdInMicroSeconds;
1720
uint64_t waitpkgCounterValue = defaultCounterValue;
1821
uint32_t waitpkgControlValue = defaultControlValue;
19-
2022
uint32_t waitCount = defaultWaitCount;
2123

2224
#ifdef SUPPORTS_WAITPKG
2325
bool waitpkgSupport = SUPPORTS_WAITPKG;
2426
#else
2527
bool waitpkgSupport = false;
2628
#endif
27-
bool waitpkgUse = false;
2829

29-
void init(bool enable) {
30-
if (waitpkgUse) {
30+
void init(WaitpkgUse inputWaitpkgUse) {
31+
if (debugManager.flags.WaitLoopCount.get() != -1) {
32+
waitCount = debugManager.flags.WaitLoopCount.get();
33+
}
34+
35+
if (waitpkgUse > WaitpkgUse::noUse) {
36+
return;
37+
}
38+
39+
if (!(waitpkgSupport && CpuInfo::getInstance().isFeatureSupported(CpuInfo::featureWaitPkg))) {
40+
waitpkgUse = WaitpkgUse::noUse;
3141
return;
3242
}
3343

3444
if (debugManager.flags.EnableWaitpkg.get() != -1) {
35-
enable = debugManager.flags.EnableWaitpkg.get();
45+
inputWaitpkgUse = static_cast<WaitpkgUse>(debugManager.flags.EnableWaitpkg.get());
3646
}
3747

38-
if (enable && waitpkgSupport) {
39-
if (CpuInfo::getInstance().isFeatureSupported(CpuInfo::featureWaitPkg)) {
40-
waitpkgUse = true;
41-
waitCount = 0;
42-
}
48+
waitpkgUse = inputWaitpkgUse;
49+
50+
if (waitpkgUse == WaitpkgUse::umonitorAndUmwait) {
51+
waitCount = 0u;
4352
}
4453

45-
int64_t overrideWaitPkgCounter = debugManager.flags.WaitpkgCounterValue.get();
46-
if (overrideWaitPkgCounter != -1) {
47-
waitpkgCounterValue = static_cast<uint64_t>(overrideWaitPkgCounter);
54+
if (debugManager.flags.WaitpkgCounterValue.get() != -1) {
55+
waitpkgCounterValue = debugManager.flags.WaitpkgCounterValue.get();
4856
}
4957

50-
int32_t overrideWaitPkgControl = debugManager.flags.WaitpkgControlValue.get();
51-
if (overrideWaitPkgControl != -1) {
52-
waitpkgControlValue = static_cast<uint32_t>(overrideWaitPkgControl);
58+
if (debugManager.flags.WaitpkgControlValue.get() != -1) {
59+
waitpkgControlValue = debugManager.flags.WaitpkgControlValue.get();
5360
}
5461

55-
int32_t overrideWaitCount = debugManager.flags.WaitLoopCount.get();
56-
if (overrideWaitCount != -1) {
57-
waitCount = static_cast<uint32_t>(overrideWaitCount);
62+
if (debugManager.flags.WaitpkgThreshold.get() != -1) {
63+
waitPkgThresholdInMicroSeconds = debugManager.flags.WaitpkgThreshold.get();
5864
}
5965
}
6066

0 commit comments

Comments
 (0)