SWDEV-440746 - Fix the hostcall buffer creation

Avoid a deadlock on the host call buffer creation. Since the buffer will be
allocated in the queue thread, then use direct device memory allocation
skipping the global context lock.

Change-Id: I09b55ee03bb42ab5d320c152b52a8c842c5fdcc1


[ROCm/clr commit: 62559a6e5a]
Cette révision appartient à :
German Andryeyev a révisé 2024-04-17 12:37:23 -04:00
1 Parent d2b2b2c5fa
révision 562f3ef098
2 fichiers modifiés
+7 -3

Aucun fichier ne correspond à votre recherche

+3 -2
Voir le fichier
@@ -1154,7 +1154,7 @@ VirtualGPU::~VirtualGPU() {
"deleting hostcall buffer %p for virtual queue %p",
hostcallBuffer_, this);
disableHostcalls(hostcallBuffer_);
dev().context().svmFree(hostcallBuffer_);
dev().svmFree(hostcallBuffer_);
}
}
@@ -3766,7 +3766,8 @@ void* VirtualGPU::getOrCreateHostcallBuffer() {
auto size = getHostcallBufferSize(numPackets);
auto align = getHostcallBufferAlignment();
hostcallBuffer_ = dev().context().svmAlloc(size, align, CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS);
hostcallBuffer_ = dev().svmAlloc(dev().context(), size, align,
CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS, nullptr);
if (!hostcallBuffer_) {
ClPrint(amd::LOG_ERROR, amd::LOG_QUEUE,
"Failed to create hostcall buffer");