fix: serialize printf kernel accesses using device-wise locks

Related-To: LOCI-4114

Signed-off-by: Lu, Wenbin <wenbin.lu@intel.com>
This commit is contained in:
Lu, Wenbin
2023-08-25 18:23:19 +00:00
committed by Compute-Runtime-Automation
parent 83ac95d293
commit 37deaf1ae5
22 changed files with 718 additions and 130 deletions

View File

@@ -190,9 +190,11 @@ ze_result_t CommandQueueImp::synchronizeByPollingForTaskCount(uint64_t timeout)
}
void CommandQueueImp::printKernelsPrintfOutput(bool hangDetected) {
size_t size = this->printfKernelContainer.size();
for (size_t i = 0; i < size; i++) {
this->printfKernelContainer[i]->printPrintfOutput(hangDetected);
for (auto &kernelWeakPtr : this->printfKernelContainer) {
std::lock_guard<std::mutex> lock(static_cast<DeviceImp *>(this->getDevice())->printfKernelMutex);
if (!kernelWeakPtr.expired()) {
kernelWeakPtr.lock()->printPrintfOutput(hangDetected);
}
}
this->printfKernelContainer.clear();
}