feature: Make priority level in priority extension truly optional

Related-To: NEO-16102

Signed-off-by: Slawomir Milczarek <slawomir.milczarek@intel.com>
This commit is contained in:
Slawomir Milczarek
2025-09-16 08:05:36 +00:00
committed by Compute-Runtime-Automation
parent 60d5484e6b
commit a5f08b5f42
11 changed files with 256 additions and 22 deletions

View File

@@ -639,7 +639,7 @@ bool Device::createSecondaryEngine(CommandStreamReceiver *primaryCsr, EngineType
return true;
}
EngineControl *Device::getSecondaryEngineCsr(EngineTypeUsage engineTypeUsage, int priorityLevel, bool allocateInterrupt) {
EngineControl *Device::getSecondaryEngineCsr(EngineTypeUsage engineTypeUsage, std::optional<int> priorityLevel, bool allocateInterrupt) {
if (secondaryEngines.find(engineTypeUsage.first) == secondaryEngines.end()) {
return nullptr;
}
@@ -1248,7 +1248,7 @@ const EngineGroupT *Device::tryGetRegularEngineGroup(EngineGroupType engineGroup
return nullptr;
}
EngineControl *SecondaryContexts::getEngine(EngineUsage usage, int priorityLevel) {
EngineControl *SecondaryContexts::getEngine(EngineUsage usage, std::optional<int> priorityLevel) {
auto secondaryEngineIndex = 0;
std::lock_guard<std::mutex> guard(mutex);
@@ -1301,7 +1301,9 @@ EngineControl *SecondaryContexts::getEngine(EngineUsage usage, int priorityLevel
} else {
DEBUG_BREAK_IF(true);
}
engines[secondaryEngineIndex].osContext->overridePriority(priorityLevel);
if (priorityLevel.has_value()) {
engines[secondaryEngineIndex].osContext->overridePriority(priorityLevel.value());
}
return &engines[secondaryEngineIndex];
}

View File

@@ -70,7 +70,7 @@ struct SecondaryContexts : NEO::NonCopyableAndNonMovableClass {
}
SecondaryContexts &operator=(SecondaryContexts &&other) noexcept = delete;
EngineControl *getEngine(const EngineUsage usage, int priority);
EngineControl *getEngine(const EngineUsage usage, std::optional<int> priority);
EnginesT engines; // vector of secondary EngineControls
std::atomic<uint8_t> regularCounter = 0; // Counter used to assign next regular EngineControl
@@ -221,7 +221,7 @@ class Device : public ReferenceTrackedObject<Device>, NEO::NonCopyableAndNonMova
return (getPreemptionMode() == PreemptionMode::MidThread || getDebugger() != nullptr) && getCompilerInterface();
}
MOCKABLE_VIRTUAL EngineControl *getSecondaryEngineCsr(EngineTypeUsage engineTypeUsage, int priority, bool allocateInterrupt);
MOCKABLE_VIRTUAL EngineControl *getSecondaryEngineCsr(EngineTypeUsage engineTypeUsage, std::optional<int> priority, bool allocateInterrupt);
bool isSecondaryContextEngineType(aub_stream::EngineType type) {
return EngineHelpers::isCcs(type) || EngineHelpers::isBcs(type);
}