MCPcopy Create free account
hub / github.com/XpuOS/xsched / SetPreemptLevel

Method SetPreemptLevel

preempt/src/xqueue/async_xqueue.cpp:152–174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150}
151
152void AsyncXQueue::SetPreemptLevel(XPreemptLevel level)
153{
154 XASSERT(level > kPreemptLevelUnknown && level < kPreemptLevelMax,
155 "invalid preempt level: %d", level);
156 // Dynamic level support of this AsyncXQueue depends on kHwQueue->SupportDynamicLevel().
157 if (!this->GetFeatures(kQueueFeatureDynamicLevel)) {
158 XASSERT(level == level_, "AsyncXQueue does not support dynamic level");
159 return;
160 }
161 if (level > kHwQueue->GetMaxSupportedLevel()) {
162 XWARN("preempt level %d is not supported by the HwQueue, "
163 "max supported level is %d", level, kHwQueue->GetMaxSupportedLevel());
164 return;
165 }
166 // Not thread-safe (with Submit & Wait).
167 // TODO: change to thread-safe, because the level change may be triggered by scheduler or xcli.
168 this->WaitAll();
169 kHwQueue->OnPreemptLevelChange(level);
170 launch_worker_->SetPreemptLevel(level);
171 level_ = level;
172 SchedAgent::SendEvent(std::make_shared<XQueueConfigUpdateEvent>(kHandle, kDevice, level_,
173 launch_worker_->GetThreshold(), launch_worker_->GetBatchSize()));
174}
175
176void AsyncXQueue::SetLaunchConfig(int64_t threshold, int64_t batch_size)
177{

Callers 1

XQueueSetPreemptLevelFunction · 0.45

Calls 6

WaitAllMethod · 0.95
GetFeaturesMethod · 0.80
GetThresholdMethod · 0.80
GetBatchSizeMethod · 0.80
GetMaxSupportedLevelMethod · 0.45
OnPreemptLevelChangeMethod · 0.45

Tested by

no test coverage detected