fix: ulls controller state and tests

Make the fields in direct submission state atomic.
Add thread yields to waiting loop in tests to avoid compiler optimizing
them away.

Related-To: NEO-10942

Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
Dominik Dabek
2024-03-28 13:15:59 +00:00
committed by Compute-Runtime-Automation
parent 94cf31033c
commit a7479e6332
3 changed files with 12 additions and 3 deletions

View File

@@ -40,7 +40,7 @@ DirectSubmissionController::~DirectSubmissionController() {
void DirectSubmissionController::registerDirectSubmission(CommandStreamReceiver *csr) {
std::lock_guard<std::mutex> lock(directSubmissionsMutex);
directSubmissions.insert(std::make_pair(csr, DirectSubmissionState{}));
directSubmissions.insert(std::make_pair(csr, DirectSubmissionState()));
this->adjustTimeout(csr);
}

View File

@@ -50,8 +50,13 @@ class DirectSubmissionController {
protected:
struct DirectSubmissionState {
bool isStopped = true;
TaskCountType taskCount = 0u;
std::atomic_bool isStopped{true};
std::atomic<TaskCountType> taskCount{0};
DirectSubmissionState(DirectSubmissionState &&other) {
isStopped = other.isStopped.load();
taskCount = other.taskCount.load();
}
DirectSubmissionState() = default;
};
static void *controlDirectSubmissionsState(void *self);

View File

@@ -97,8 +97,10 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout
controller.registerDirectSubmission(&csr);
while (controller.directSubmissions[&csr].taskCount != 9u) {
std::this_thread::yield();
}
while (!controller.directSubmissions[&csr].isStopped) {
std::this_thread::yield();
}
{
std::lock_guard<std::mutex> lock(controller.directSubmissionsMutex);
@@ -118,6 +120,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithStarted
controller.startControlling();
while (!controller.sleepCalled) {
std::this_thread::yield();
}
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
@@ -341,6 +344,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStar
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
while (!controller.sleepCalled) {
std::this_thread::yield();
}
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();