SWDEV-272496 - Delay enqueue until callback setup

With direct dispatch enqueue occurs before callback update and
it can't be tracked in the device backend

Change-Id: Ie8793e3ddb68cc5bb36348f7a8dcdbdc87a2487c


[ROCm/hip commit: ffc89dff8a]
Этот коммит содержится в:
German Andryeyev
2021-03-03 13:14:28 -05:00
родитель 5fb266cfb9
Коммит 94afcd643c
+5 -2
Просмотреть файл
@@ -368,6 +368,7 @@ hipError_t hipStreamAddCallback(hipStream_t stream, hipStreamCallback_t callback
}
amd::HostQueue* hostQueue = hip::getQueue(stream);
amd::Command* command = hostQueue->getLastQueuedCommand(true);
bool cmd_created = false;
if (command == nullptr ||
// Add a marker if the last command is a notification,
// since with multithreading AddCallback may occur before the previous
@@ -375,7 +376,7 @@ hipError_t hipStreamAddCallback(hipStream_t stream, hipStreamCallback_t callback
(command->type() == 0)) {
amd::Command::EventWaitList eventWaitList;
command = new amd::Marker(*hostQueue, kMarkerDisableFlush, eventWaitList);
command->enqueue();
cmd_created = true;
}
amd::Event& event = command->event();
StreamCallback* cbo = new StreamCallback(stream, callback, userData, command);
@@ -384,7 +385,9 @@ hipError_t hipStreamAddCallback(hipStream_t stream, hipStreamCallback_t callback
command->release();
return hipErrorInvalidHandle;
}
if (cmd_created) {
command->enqueue();
}
event.notifyCmdQueue();
HIP_RETURN(hipSuccess);