Skip to content

Commit acf9799

Browse files
Force Kmd Notify timeout for Windows machines running on battery
- This is to improve battery usage while waiting in busy loop on CPU - New Kmd Notify helper to maintain dynamic parameters - Ask OS about battery status on longer waits - Pick different timeout when using battery and optimization is disabled Change-Id: I5f9c8c5a9c635652aac27c707f2b55933947a7fb
1 parent 5fdd853 commit acf9799

File tree

17 files changed

+395
-103
lines changed

17 files changed

+395
-103
lines changed

runtime/builtin_kernels_simulation/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,4 @@ target_include_directories(${BIKSIM_LIB_NAME} BEFORE PRIVATE
6464
${THIRD_PARTY_DIR}
6565
)
6666
set_target_properties(${BIKSIM_LIB_NAME} PROPERTIES FOLDER "built_ins")
67-
target_compile_definitions(${BIKSIM_LIB_NAME} PUBLIC ${SUPPORTED_GEN_FLAGS_DEFINITONS} ${DEFAULT_GEN_PLATFORMS_DEFITIONS})
67+
target_compile_definitions(${BIKSIM_LIB_NAME} PUBLIC ${SUPPORTED_GEN_FLAGS_DEFINITONS} ${DEFAULT_GEN_PLATFORMS_DEFITIONS} MOCKABLE_VIRTUAL=)

runtime/command_stream/command_stream_receiver_hw.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ class CommandStreamReceiverHw : public CommandStreamReceiver {
7676
uint64_t generalStateBase,
7777
uint64_t internalHeapBaseAddress);
7878

79+
void resetKmdNotifyHelper(KmdNotifyHelper *newHelper);
80+
7981
protected:
8082
void programPreemption(LinearStream &csr, DispatchFlags &dispatchFlags);
8183
void programL3(LinearStream &csr, DispatchFlags &dispatchFlags, uint32_t &newL3Config);
@@ -90,7 +92,6 @@ class CommandStreamReceiverHw : public CommandStreamReceiver {
9092
PIPE_CONTROL *addPipeControlCmd(LinearStream &commandStream);
9193

9294
uint64_t getScratchPatchAddress();
93-
MOCKABLE_VIRTUAL void updateLastWaitForCompletionTimestamp();
9495

9596
static void emitNoop(LinearStream &commandStream, size_t bytesToUpdate);
9697

@@ -101,7 +102,7 @@ class CommandStreamReceiverHw : public CommandStreamReceiver {
101102
const HardwareInfo &hwInfo;
102103
CsrSizeRequestFlags csrSizeRequestFlags = {};
103104

104-
std::chrono::high_resolution_clock::time_point lastWaitForCompletionTimestamp;
105+
std::unique_ptr<KmdNotifyHelper> kmdNotifyHelper;
105106
};
106107

107108
template <typename GfxFamily>

runtime/command_stream/command_stream_receiver_hw.inl

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ namespace OCLRT {
4040
template <typename GfxFamily>
4141
CommandStreamReceiverHw<GfxFamily>::CommandStreamReceiverHw(const HardwareInfo &hwInfoIn) : hwInfo(hwInfoIn) {
4242
requiredThreadArbitrationPolicy = PreambleHelper<GfxFamily>::getDefaultThreadArbitrationPolicy();
43-
if (hwInfo.capabilityTable.kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits) {
44-
lastWaitForCompletionTimestamp = std::chrono::high_resolution_clock::now();
45-
}
43+
resetKmdNotifyHelper(new KmdNotifyHelper(&(hwInfoIn.capabilityTable.kmdNotifyProperties)));
4644
}
4745

4846
template <typename GfxFamily>
@@ -568,22 +566,19 @@ inline void CommandStreamReceiverHw<GfxFamily>::emitNoop(LinearStream &commandSt
568566

569567
template <typename GfxFamily>
570568
inline void CommandStreamReceiverHw<GfxFamily>::waitForTaskCountWithKmdNotifyFallback(uint32_t taskCountToWait, FlushStamp flushStampToWait, bool useQuickKmdSleep) {
571-
const auto &kmdNotifyProperties = this->hwInfo.capabilityTable.kmdNotifyProperties;
572-
573-
int64_t waitTimeout = kmdNotifyProperties.pickTimeoutValue(lastWaitForCompletionTimestamp, useQuickKmdSleep, *getTagAddress(), taskCountToWait);
569+
int64_t waitTimeout = 0;
570+
bool enableTimeout = kmdNotifyHelper->obtainTimeoutParams(waitTimeout, useQuickKmdSleep, *getTagAddress(), taskCountToWait, flushStampToWait);
574571

575-
auto status = waitForCompletionWithTimeout(kmdNotifyProperties.timeoutEnabled(flushStampToWait),
576-
waitTimeout,
577-
taskCountToWait);
572+
auto status = waitForCompletionWithTimeout(enableTimeout, waitTimeout, taskCountToWait);
578573
if (!status) {
579574
waitForFlushStamp(flushStampToWait);
580575
//now call blocking wait, this is to ensure that task count is reached
581576
waitForCompletionWithTimeout(false, 0, taskCountToWait);
582577
}
583578
UNRECOVERABLE_IF(*getTagAddress() < taskCountToWait);
584579

585-
if (kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits) {
586-
updateLastWaitForCompletionTimestamp();
580+
if (kmdNotifyHelper->quickKmdSleepForSporadicWaitsEnabled()) {
581+
kmdNotifyHelper->updateLastWaitForCompletionTimestamp();
587582
}
588583
}
589584

@@ -636,11 +631,6 @@ size_t CommandStreamReceiverHw<GfxFamily>::getCmdSizeForMediaSampler(bool mediaS
636631
return 0;
637632
}
638633

639-
template <typename GfxFamily>
640-
void CommandStreamReceiverHw<GfxFamily>::updateLastWaitForCompletionTimestamp() {
641-
lastWaitForCompletionTimestamp = std::chrono::high_resolution_clock::now();
642-
}
643-
644634
template <typename GfxFamily>
645635
void CommandStreamReceiverHw<GfxFamily>::collectStateBaseAddresPatchInfo(
646636
uint64_t baseAddress,
@@ -666,4 +656,13 @@ void CommandStreamReceiverHw<GfxFamily>::collectStateBaseAddresPatchInfo(
666656
setPatchInfoData(instructionPatchInfo);
667657
}
668658

659+
template <typename GfxFamily>
660+
void CommandStreamReceiverHw<GfxFamily>::resetKmdNotifyHelper(KmdNotifyHelper *newHelper) {
661+
kmdNotifyHelper.reset(newHelper);
662+
kmdNotifyHelper->updateAcLineStatus();
663+
if (kmdNotifyHelper->quickKmdSleepForSporadicWaitsEnabled()) {
664+
kmdNotifyHelper->updateLastWaitForCompletionTimestamp();
665+
}
666+
}
667+
669668
} // namespace OCLRT

runtime/helpers/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,17 @@ set(RUNTIME_SRCS_HELPERS_BASE
8888
set(RUNTIME_SRCS_HELPERS_WINDOWS
8989
${CMAKE_CURRENT_SOURCE_DIR}/translationtable_callbacks.h
9090
${CMAKE_CURRENT_SOURCE_DIR}/translationtable_callbacks.inl
91+
${CMAKE_CURRENT_SOURCE_DIR}/windows/kmd_notify_properties_windows.cpp
9192
${CMAKE_CURRENT_SOURCE_DIR}/wddm_helper.h
9293
)
94+
set(RUNTIME_SRCS_HELPERS_LINUX
95+
${CMAKE_CURRENT_SOURCE_DIR}/linux/kmd_notify_properties_linux.cpp
96+
)
9397

9498
target_sources(${NEO_STATIC_LIB_NAME} PRIVATE ${RUNTIME_SRCS_HELPERS_BASE})
9599
if(WIN32)
96100
target_sources(${NEO_STATIC_LIB_NAME} PRIVATE ${RUNTIME_SRCS_HELPERS_WINDOWS})
101+
else()
102+
target_sources(${NEO_STATIC_LIB_NAME} PRIVATE ${RUNTIME_SRCS_HELPERS_LINUX})
97103
endif()
98104
set_property(GLOBAL PROPERTY RUNTIME_SRCS_HELPERS_BASE ${RUNTIME_SRCS_HELPERS_BASE})

runtime/helpers/kmd_notify_properties.cpp

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,41 +25,51 @@
2525

2626
using namespace OCLRT;
2727

28-
bool KmdNotifyProperties::timeoutEnabled(FlushStamp flushStampToWait) const {
29-
return enableKmdNotify && flushStampToWait != 0;
30-
}
28+
bool KmdNotifyHelper::obtainTimeoutParams(int64_t &timeoutValueOutput,
29+
bool quickKmdSleepRequest,
30+
uint32_t currentHwTag,
31+
uint32_t taskCountToWait,
32+
FlushStamp flushStampToWait) {
33+
int64_t multiplier = (currentHwTag < taskCountToWait) ? static_cast<int64_t>(taskCountToWait - currentHwTag) : 1;
34+
if (!properties->enableKmdNotify && multiplier > KmdNotifyConstants::minimumTaskCountDiffToCheckAcLine) {
35+
updateAcLineStatus();
36+
}
3137

32-
int64_t KmdNotifyProperties::pickTimeoutValue(std::chrono::high_resolution_clock::time_point &lastWaitTimestamp,
33-
bool quickKmdSleepRequest, uint32_t currentHwTag, uint32_t taskCountToWait) const {
34-
quickKmdSleepRequest |= applyQuickKmdSleepForSporadicWait(lastWaitTimestamp);
38+
quickKmdSleepRequest |= applyQuickKmdSleepForSporadicWait();
3539

36-
if (quickKmdSleepRequest && enableQuickKmdSleep) {
37-
return delayQuickKmdSleepMicroseconds;
40+
if (!properties->enableKmdNotify && !acLineConnected) {
41+
timeoutValueOutput = KmdNotifyConstants::timeoutInMicrosecondsForDisconnectedAcLine;
42+
} else if (quickKmdSleepRequest && properties->enableQuickKmdSleep) {
43+
timeoutValueOutput = properties->delayQuickKmdSleepMicroseconds;
44+
} else {
45+
timeoutValueOutput = properties->delayKmdNotifyMicroseconds * multiplier;
3846
}
3947

40-
int64_t multiplier = (currentHwTag < taskCountToWait) ? static_cast<int64_t>(taskCountToWait - currentHwTag) : 1;
41-
42-
return delayKmdNotifyMicroseconds * multiplier;
48+
return flushStampToWait != 0 && (properties->enableKmdNotify || !acLineConnected);
4349
}
4450

45-
bool KmdNotifyProperties::applyQuickKmdSleepForSporadicWait(std::chrono::high_resolution_clock::time_point &lastWaitTimestamp) const {
46-
if (enableQuickKmdSleepForSporadicWaits) {
51+
bool KmdNotifyHelper::applyQuickKmdSleepForSporadicWait() const {
52+
if (properties->enableQuickKmdSleepForSporadicWaits) {
4753
auto now = std::chrono::high_resolution_clock::now();
48-
auto timeDiff = std::chrono::duration_cast<std::chrono::microseconds>(now - lastWaitTimestamp).count();
49-
if (timeDiff > delayQuickKmdSleepForSporadicWaitsMicroseconds) {
54+
auto timeDiff = std::chrono::duration_cast<std::chrono::microseconds>(now - lastWaitForCompletionTimestamp).count();
55+
if (timeDiff > properties->delayQuickKmdSleepForSporadicWaitsMicroseconds) {
5056
return true;
5157
}
5258
}
5359
return false;
5460
}
5561

56-
void KmdNotifyProperties::overrideFromDebugVariable(int32_t debugVariableValue, int64_t &destination) {
62+
void KmdNotifyHelper::updateLastWaitForCompletionTimestamp() {
63+
lastWaitForCompletionTimestamp = std::chrono::high_resolution_clock::now();
64+
}
65+
66+
void KmdNotifyHelper::overrideFromDebugVariable(int32_t debugVariableValue, int64_t &destination) {
5767
if (debugVariableValue >= 0) {
5868
destination = static_cast<int64_t>(debugVariableValue);
5969
}
6070
}
6171

62-
void KmdNotifyProperties::overrideFromDebugVariable(int32_t debugVariableValue, bool &destination) {
72+
void KmdNotifyHelper::overrideFromDebugVariable(int32_t debugVariableValue, bool &destination) {
6373
if (debugVariableValue >= 0) {
6474
destination = !!(debugVariableValue);
6575
}

runtime/helpers/kmd_notify_properties.h

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,36 @@ struct KmdNotifyProperties {
3737
// If waits are called sporadically use QuickKmdSleep mode, otherwise use standard delay
3838
bool enableQuickKmdSleepForSporadicWaits;
3939
int64_t delayQuickKmdSleepForSporadicWaitsMicroseconds;
40+
};
41+
42+
namespace KmdNotifyConstants {
43+
constexpr int64_t timeoutInMicrosecondsForDisconnectedAcLine = 10000;
44+
constexpr uint32_t minimumTaskCountDiffToCheckAcLine = 10;
45+
} // namespace KmdNotifyConstants
4046

41-
bool timeoutEnabled(FlushStamp flushStampToWait) const;
47+
class KmdNotifyHelper {
48+
public:
49+
KmdNotifyHelper() = delete;
50+
KmdNotifyHelper(const KmdNotifyProperties *properties) : properties(properties){};
4251

43-
int64_t pickTimeoutValue(std::chrono::high_resolution_clock::time_point &lastWaitTimestamp,
44-
bool quickKmdSleepRequest, uint32_t currentHwTag, uint32_t taskCountToWait) const;
52+
bool obtainTimeoutParams(int64_t &timeoutValueOutput,
53+
bool quickKmdSleepRequest,
54+
uint32_t currentHwTag,
55+
uint32_t taskCountToWait,
56+
FlushStamp flushStampToWait);
4557

46-
bool applyQuickKmdSleepForSporadicWait(std::chrono::high_resolution_clock::time_point &lastWaitTimestamp) const;
58+
bool quickKmdSleepForSporadicWaitsEnabled() const { return properties->enableQuickKmdSleepForSporadicWaits; }
59+
MOCKABLE_VIRTUAL void updateLastWaitForCompletionTimestamp();
60+
MOCKABLE_VIRTUAL void updateAcLineStatus();
4761

4862
static void overrideFromDebugVariable(int32_t debugVariableValue, int64_t &destination);
4963
static void overrideFromDebugVariable(int32_t debugVariableValue, bool &destination);
64+
65+
protected:
66+
bool applyQuickKmdSleepForSporadicWait() const;
67+
68+
const KmdNotifyProperties *properties = nullptr;
69+
std::chrono::high_resolution_clock::time_point lastWaitForCompletionTimestamp;
70+
bool acLineConnected = true;
5071
};
5172
} // namespace OCLRT
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright (c) 2018, Intel Corporation
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a
5+
* copy of this software and associated documentation files (the "Software"),
6+
* to deal in the Software without restriction, including without limitation
7+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8+
* and/or sell copies of the Software, and to permit persons to whom the
9+
* Software is furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included
12+
* in all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18+
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19+
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20+
* OTHER DEALINGS IN THE SOFTWARE.
21+
*/
22+
23+
#include "runtime/helpers/kmd_notify_properties.h"
24+
25+
void OCLRT::KmdNotifyHelper::updateAcLineStatus() {}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright (c) 2018, Intel Corporation
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a
5+
* copy of this software and associated documentation files (the "Software"),
6+
* to deal in the Software without restriction, including without limitation
7+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8+
* and/or sell copies of the Software, and to permit persons to whom the
9+
* Software is furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included
12+
* in all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18+
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19+
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20+
* OTHER DEALINGS IN THE SOFTWARE.
21+
*/
22+
23+
#include "runtime/helpers/kmd_notify_properties.h"
24+
#include "runtime/os_interface/windows/sys_calls.h"
25+
26+
void OCLRT::KmdNotifyHelper::updateAcLineStatus() {
27+
SYSTEM_POWER_STATUS systemPowerStatus = {};
28+
auto powerStatusRetValue = SysCalls::getSystemPowerStatus(&systemPowerStatus);
29+
if (powerStatusRetValue == 1) {
30+
acLineConnected = (systemPowerStatus.ACLineStatus == 1);
31+
}
32+
}

runtime/os_interface/linux/hw_info_config.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,12 @@ int HwInfoConfig::configureHwInfo(const HardwareInfo *inHwInfo, HardwareInfo *ou
183183
outHwInfo->capabilityTable.requiredPreemptionSurfaceSize = outHwInfo->pSysInfo->CsrSizeInMb * MemoryConstants::megaByte;
184184

185185
auto &kmdNotifyProperties = outHwInfo->capabilityTable.kmdNotifyProperties;
186-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
187-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideKmdNotifyDelayMicroseconds.get(), kmdNotifyProperties.delayKmdNotifyMicroseconds);
188-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleep.get(), kmdNotifyProperties.enableQuickKmdSleep);
189-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideQuickKmdSleepDelayMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepMicroseconds);
190-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleepForSporadicWaits.get(), kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits);
191-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideDelayQuickKmdSleepForSporadicWaitsMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds);
186+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
187+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideKmdNotifyDelayMicroseconds.get(), kmdNotifyProperties.delayKmdNotifyMicroseconds);
188+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleep.get(), kmdNotifyProperties.enableQuickKmdSleep);
189+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideQuickKmdSleepDelayMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepMicroseconds);
190+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleepForSporadicWaits.get(), kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits);
191+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideDelayQuickKmdSleepForSporadicWaitsMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds);
192192

193193
pPlatform.release();
194194
pSkuTable.release();

runtime/os_interface/windows/hw_info_config.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ int HwInfoConfig::configureHwInfo(const HardwareInfo *inHwInfo, HardwareInfo *ou
5656
outHwInfo->capabilityTable.instrumentationEnabled &= haveInstrumentation;
5757

5858
auto &kmdNotifyProperties = outHwInfo->capabilityTable.kmdNotifyProperties;
59-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
60-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideKmdNotifyDelayMicroseconds.get(), kmdNotifyProperties.delayKmdNotifyMicroseconds);
61-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleep.get(), kmdNotifyProperties.enableQuickKmdSleep);
62-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideQuickKmdSleepDelayMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepMicroseconds);
63-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleepForSporadicWaits.get(), kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits);
64-
KmdNotifyProperties::overrideFromDebugVariable(DebugManager.flags.OverrideDelayQuickKmdSleepForSporadicWaitsMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds);
59+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
60+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideKmdNotifyDelayMicroseconds.get(), kmdNotifyProperties.delayKmdNotifyMicroseconds);
61+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleep.get(), kmdNotifyProperties.enableQuickKmdSleep);
62+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideQuickKmdSleepDelayMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepMicroseconds);
63+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableQuickKmdSleepForSporadicWaits.get(), kmdNotifyProperties.enableQuickKmdSleepForSporadicWaits);
64+
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideDelayQuickKmdSleepForSporadicWaitsMicroseconds.get(), kmdNotifyProperties.delayQuickKmdSleepForSporadicWaitsMicroseconds);
6565

6666
// Product specific config
6767
int ret = configureHardwareCustom(outHwInfo, osIface);

0 commit comments

Comments
 (0)