fix: unregister CSR client on OCL sync points

Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz
2023-08-11 10:22:19 +00:00
committed by Compute-Runtime-Automation
parent 998e0a5833
commit 3cf1f5c462
9 changed files with 111 additions and 41 deletions

View File

@@ -1293,7 +1293,7 @@ WaitStatus CommandQueue::waitForAllEngines(bool blockedQueue, PrintfHandler *pri
waitStatus = waitUntilComplete(taskCount, activeBcsStates, flushStamp->peekStamp(), false, cleanTemporaryAllocationsList, waitedOnTimestamps);
tryReleaseDeferredNodes(false);
handlePostCompletionOperations(false);
if (printfHandler) {
if (!printfHandler->printEnqueueOutput()) {
@@ -1381,13 +1381,15 @@ bool CommandQueue::migrateMultiGraphicsAllocationsIfRequired(const BuiltinOpPara
return migrationHandled;
}
void CommandQueue::tryReleaseDeferredNodes(bool checkEventsState) {
void CommandQueue::handlePostCompletionOperations(bool checkQueueCompletion) {
TakeOwnershipWrapper<CommandQueue> queueOwnership(*this);
if (checkEventsState && !isCompleted(this->taskCount, this->bcsStates)) {
if (checkQueueCompletion && !isCompleted(this->taskCount, this->bcsStates)) {
return;
}
unregisterGpgpuAndBcsCsrClients();
TimestampPacketContainer nodesToRelease;
if (deferredTimestampPackets) {
deferredTimestampPackets->swapNodes(nodesToRelease);
@@ -1398,4 +1400,51 @@ void CommandQueue::tryReleaseDeferredNodes(bool checkEventsState) {
}
}
void CommandQueue::registerGpgpuCsrClient() {
if (!gpgpuCsrClientRegistered) {
gpgpuCsrClientRegistered = true;
getGpgpuCommandStreamReceiver().registerClient();
}
}
void CommandQueue::registerBcsCsrClient(CommandStreamReceiver &bcsCsr) {
auto engineType = bcsCsr.getOsContext().getEngineType();
auto &bcsState = bcsStates[EngineHelpers::getBcsIndex(engineType)];
if (!bcsState.csrClientRegistered) {
bcsState.csrClientRegistered = true;
bcsCsr.registerClient();
}
}
void CommandQueue::unregisterGpgpuCsrClient() {
if (gpgpuCsrClientRegistered) {
gpgpuEngine->commandStreamReceiver->unregisterClient();
gpgpuCsrClientRegistered = false;
}
}
void CommandQueue::unregisterBcsCsrClient(CommandStreamReceiver &bcsCsr) {
auto engineType = bcsCsr.getOsContext().getEngineType();
auto &bcsState = bcsStates[EngineHelpers::getBcsIndex(engineType)];
if (bcsState.isValid() && bcsState.csrClientRegistered) {
bcsCsr.unregisterClient();
bcsState.csrClientRegistered = false;
}
}
void CommandQueue::unregisterGpgpuAndBcsCsrClients() {
unregisterGpgpuCsrClient();
for (auto &engine : this->bcsEngines) {
if (engine) {
unregisterBcsCsrClient(*engine->commandStreamReceiver);
}
}
}
} // namespace NEO