SWDEV-271964 - Revert "SWDEV-264244 Fix StreamSync"
This reverts commita962e2d0b3. Change-Id: I870c8b71edeb31f587fffe2447762acba61a7938 [ROCm/clr commit:184b2631d5]
Este commit está contenido en:
@@ -183,65 +183,50 @@ void Event::processCallbacks(int32_t status) const {
|
||||
}
|
||||
}
|
||||
|
||||
void Event::waitForCompletion() {
|
||||
ClPrint(LOG_DEBUG, LOG_WAIT, "waiting for event %p to complete, current status %d", this, status());
|
||||
auto* queue = command().queue();
|
||||
if ((queue != nullptr) && queue->vdev()->ActiveWait()) {
|
||||
while (status() > CL_COMPLETE) {
|
||||
amd::Os::yield();
|
||||
}
|
||||
} else {
|
||||
ScopedLock lock(lock_);
|
||||
|
||||
// Wait until the status becomes CL_COMPLETE or negative.
|
||||
while (status() > CL_COMPLETE) {
|
||||
lock_.wait();
|
||||
}
|
||||
}
|
||||
ClPrint(LOG_DEBUG, LOG_WAIT, "event %p wait completed", this);
|
||||
}
|
||||
|
||||
bool Event::awaitCompletion() {
|
||||
if (status() > CL_COMPLETE) {
|
||||
// Notifies current command queue about waiting
|
||||
Command* command = notifyCmdQueue(true);
|
||||
if (command == nullptr) {
|
||||
if (!notifyCmdQueue()) {
|
||||
return false;
|
||||
} else {
|
||||
command->waitForCompletion();
|
||||
auto status = command->status();
|
||||
command->release();
|
||||
return status == CL_COMPLETE;
|
||||
}
|
||||
|
||||
ClPrint(LOG_DEBUG, LOG_WAIT, "waiting for event %p to complete, current status %d", this, status());
|
||||
auto* queue = command().queue();
|
||||
if ((queue != nullptr) && queue->vdev()->ActiveWait()) {
|
||||
while (status() > CL_COMPLETE) {
|
||||
amd::Os::yield();
|
||||
}
|
||||
} else {
|
||||
ScopedLock lock(lock_);
|
||||
|
||||
// Wait until the status becomes CL_COMPLETE or negative.
|
||||
while (status() > CL_COMPLETE) {
|
||||
lock_.wait();
|
||||
}
|
||||
}
|
||||
ClPrint(LOG_DEBUG, LOG_WAIT, "event %p wait completed", this);
|
||||
}
|
||||
// Command is already completed
|
||||
|
||||
return status() == CL_COMPLETE;
|
||||
}
|
||||
|
||||
Command* Event::notifyCmdQueue(bool retain) {
|
||||
bool Event::notifyCmdQueue() {
|
||||
HostQueue* queue = command().queue();
|
||||
if ((status() > CL_COMPLETE) &&
|
||||
// Don't need to send notify for notifications, which have 0 type
|
||||
(command().type() != 0) &&
|
||||
(nullptr != queue) && !notified_.test_and_set()) {
|
||||
// Make sure the queue is draining the enqueued commands.
|
||||
amd::Command* internalCommand = new amd::Marker(*queue, false, nullWaitList, this);
|
||||
if (internalCommand == NULL) {
|
||||
amd::Command* command = new amd::Marker(*queue, false, nullWaitList, this);
|
||||
if (command == NULL) {
|
||||
notified_.clear();
|
||||
return nullptr;
|
||||
return false;
|
||||
}
|
||||
ClPrint(LOG_DEBUG, LOG_CMD, "queue marker to command queue: %p", queue);
|
||||
internalCommand->enqueue();
|
||||
// if retain is false, release the command here, else release in the caller function
|
||||
if (!retain) {
|
||||
internalCommand->release();
|
||||
}
|
||||
return internalCommand;
|
||||
command->enqueue();
|
||||
command->release();
|
||||
}
|
||||
if (retain) {
|
||||
this->retain();
|
||||
}
|
||||
return &command();
|
||||
return true;
|
||||
}
|
||||
|
||||
const Event::EventWaitList Event::nullWaitList(0);
|
||||
|
||||
@@ -152,8 +152,6 @@ class Event : public RuntimeObject {
|
||||
//! Process the callbacks for the given \a status change.
|
||||
void processCallbacks(int32_t status) const;
|
||||
|
||||
void waitForCompletion();
|
||||
|
||||
//! Enable profiling for this command
|
||||
void EnableProfiling() {
|
||||
profilingInfo_.enabled_ = true;
|
||||
@@ -202,7 +200,7 @@ class Event : public RuntimeObject {
|
||||
|
||||
/*! \brief Notifies current command queue about execution status
|
||||
*/
|
||||
Command* notifyCmdQueue(bool retain = false);
|
||||
bool notifyCmdQueue();
|
||||
|
||||
//! RTTI internal implementation
|
||||
virtual ObjectType objectType() const { return ObjectTypeEvent; }
|
||||
|
||||
Referencia en una nueva incidencia
Block a user