mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 18:06:32 +08:00
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:
committed by
Compute-Runtime-Automation
parent
94cf31033c
commit
a7479e6332
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user