mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-22 10:17:01 +08:00
fix: unregister CSR client on OCL sync points
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
998e0a5833
commit
3cf1f5c462
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user