diff --git a/shared/source/direct_submission/direct_submission_controller.cpp b/shared/source/direct_submission/direct_submission_controller.cpp index 0f2206b9c9..40d295f494 100644 --- a/shared/source/direct_submission/direct_submission_controller.cpp +++ b/shared/source/direct_submission/direct_submission_controller.cpp @@ -78,21 +78,17 @@ void DirectSubmissionController::checkNewSubmissions() { auto &state = directSubmission.second; auto taskCount = csr->peekTaskCount(); - if (csr->testTaskCountReady(csr->getTagAddress(), taskCount)) { - if (taskCount == state.taskCount) { - if (state.isStopped) { - continue; - } else { - auto lock = csr->obtainUniqueOwnership(); - csr->stopDirectSubmission(); - state.isStopped = true; - } + if (taskCount == state.taskCount) { + if (state.isStopped) { + continue; } else { - state.isStopped = false; - state.taskCount = taskCount; + auto lock = csr->obtainUniqueOwnership(); + csr->stopDirectSubmission(); + state.isStopped = true; } } else { state.isStopped = false; + state.taskCount = taskCount; } } } diff --git a/shared/source/direct_submission/direct_submission_controller.h b/shared/source/direct_submission/direct_submission_controller.h index 959df908ac..7c5323be7d 100644 --- a/shared/source/direct_submission/direct_submission_controller.h +++ b/shared/source/direct_submission/direct_submission_controller.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019-2021 Intel Corporation + * Copyright (C) 2019-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -31,7 +31,7 @@ class DirectSubmissionController { protected: struct DirectSubmissionState { - bool isStopped = false; + bool isStopped = true; uint32_t taskCount = 0u; }; diff --git a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp index ee7818d0f0..3ba9b3614c 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp @@ -29,8 +29,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste DeviceBitfield deviceBitfield(1); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - csr.initializeTagAllocation(); - *csr.tagAddress = 0u; csr.taskCount.store(5u); DirectSubmissionControllerMock controller; @@ -39,11 +37,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste controller.directSubmissionControllingThread.reset(); controller.registerDirectSubmission(&csr); - controller.checkNewSubmissions(); - EXPECT_FALSE(controller.directSubmissions[&csr].isStopped); - EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 0u); - - *csr.tagAddress = 5u; controller.checkNewSubmissions(); EXPECT_FALSE(controller.directSubmissions[&csr].isStopped); EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 5u); @@ -51,11 +44,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste csr.taskCount.store(6u); controller.checkNewSubmissions(); EXPECT_FALSE(controller.directSubmissions[&csr].isStopped); - EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 5u); - - *csr.tagAddress = 6u; - controller.checkNewSubmissions(); - EXPECT_FALSE(controller.directSubmissions[&csr].isStopped); EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 6u); controller.checkNewSubmissions(); @@ -69,36 +57,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste csr.taskCount.store(8u); controller.checkNewSubmissions(); EXPECT_FALSE(controller.directSubmissions[&csr].isStopped); - EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 6u); - - controller.unregisterDirectSubmission(&csr); -} - -TEST(DirectSubmissionControllerTests, givenDirectSubmissionWithMultiplePartitionsWhenCheckNewSubmissionThenCheckAllPartitions) { - MockExecutionEnvironment executionEnvironment; - executionEnvironment.prepareRootDeviceEnvironments(1); - executionEnvironment.initializeMemoryManager(); - - DeviceBitfield deviceBitfield(0b11); - MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - csr.postSyncWriteOffset = 32u; - csr.activePartitions = 2; - csr.initializeTagAllocation(); - *csr.tagAddress = 5u; - auto nextPartitionTagAddress = ptrOffset(csr.tagAddress, csr.getPostSyncWriteOffset()); - *nextPartitionTagAddress = 2u; - csr.taskCount.store(5u); - - DirectSubmissionControllerMock controller; - controller.keepControlling.store(false); - controller.directSubmissionControllingThread->join(); - controller.directSubmissionControllingThread.reset(); - controller.registerDirectSubmission(&csr); - - controller.checkNewSubmissions(); - - EXPECT_FALSE(controller.directSubmissions[&csr].isStopped); - EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 0u); + EXPECT_EQ(controller.directSubmissions[&csr].taskCount, 8u); controller.unregisterDirectSubmission(&csr); } @@ -119,6 +78,8 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout csr.startControllingDirectSubmissions(); controller.registerDirectSubmission(&csr); + while (controller.directSubmissions[&csr].taskCount != 9u) { + } while (!controller.directSubmissions[&csr].isStopped) { }