mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 09:14:47 +08:00
fix: move ulls controller thread start
Move starting ulls controller thread outside constructor to avoid vptr race. Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
707796a50d
commit
295b58a11f
@@ -28,8 +28,6 @@ DirectSubmissionController::DirectSubmissionController() {
|
|||||||
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
|
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
|
||||||
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
|
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
|
||||||
}
|
}
|
||||||
|
|
||||||
directSubmissionControllingThread = Thread::create(controlDirectSubmissionsState, reinterpret_cast<void *>(this));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DirectSubmissionController::~DirectSubmissionController() {
|
DirectSubmissionController::~DirectSubmissionController() {
|
||||||
@@ -86,6 +84,10 @@ void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceive
|
|||||||
directSubmissions.erase(csr);
|
directSubmissions.erase(csr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DirectSubmissionController::startThread() {
|
||||||
|
directSubmissionControllingThread = Thread::create(controlDirectSubmissionsState, reinterpret_cast<void *>(this));
|
||||||
|
}
|
||||||
|
|
||||||
void DirectSubmissionController::startControlling() {
|
void DirectSubmissionController::startControlling() {
|
||||||
this->runControlling.store(true);
|
this->runControlling.store(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class DirectSubmissionController {
|
|||||||
void registerDirectSubmission(CommandStreamReceiver *csr);
|
void registerDirectSubmission(CommandStreamReceiver *csr);
|
||||||
void unregisterDirectSubmission(CommandStreamReceiver *csr);
|
void unregisterDirectSubmission(CommandStreamReceiver *csr);
|
||||||
|
|
||||||
|
void startThread();
|
||||||
void startControlling();
|
void startControlling();
|
||||||
|
|
||||||
static bool isSupported();
|
static bool isSupported();
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionCont
|
|||||||
|
|
||||||
if (initializeDirectSubmissionController && this->directSubmissionController == nullptr) {
|
if (initializeDirectSubmissionController && this->directSubmissionController == nullptr) {
|
||||||
this->directSubmissionController = std::make_unique<DirectSubmissionController>();
|
this->directSubmissionController = std::make_unique<DirectSubmissionController>();
|
||||||
|
this->directSubmissionController->startThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
return directSubmissionController.get();
|
return directSubmissionController.get();
|
||||||
|
|||||||
@@ -48,9 +48,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste
|
|||||||
csr.taskCount.store(5u);
|
csr.taskCount.store(5u);
|
||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
controller.keepControlling.store(false);
|
|
||||||
controller.directSubmissionControllingThread->join();
|
|
||||||
controller.directSubmissionControllingThread.reset();
|
|
||||||
controller.registerDirectSubmission(&csr);
|
controller.registerDirectSubmission(&csr);
|
||||||
|
|
||||||
controller.checkNewSubmissions();
|
controller.checkNewSubmissions();
|
||||||
@@ -95,6 +92,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout
|
|||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
executionEnvironment.directSubmissionController.reset(&controller);
|
executionEnvironment.directSubmissionController.reset(&controller);
|
||||||
|
controller.startThread();
|
||||||
csr.startControllingDirectSubmissions();
|
csr.startControllingDirectSubmissions();
|
||||||
controller.registerDirectSubmission(&csr);
|
controller.registerDirectSubmission(&csr);
|
||||||
|
|
||||||
@@ -115,8 +113,8 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout
|
|||||||
|
|
||||||
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithStartedControllingWhenShuttingDownThenNoHang) {
|
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithStartedControllingWhenShuttingDownThenNoHang) {
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
|
controller.startThread();
|
||||||
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
|
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
|
||||||
|
|
||||||
controller.startControlling();
|
controller.startControlling();
|
||||||
|
|
||||||
while (!controller.sleepCalled) {
|
while (!controller.sleepCalled) {
|
||||||
@@ -143,9 +141,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndDivisorD
|
|||||||
csr.setupContext(*osContext.get());
|
csr.setupContext(*osContext.get());
|
||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
controller.keepControlling.store(false);
|
|
||||||
controller.directSubmissionControllingThread->join();
|
|
||||||
controller.directSubmissionControllingThread.reset();
|
|
||||||
controller.registerDirectSubmission(&csr);
|
controller.registerDirectSubmission(&csr);
|
||||||
{
|
{
|
||||||
csr.taskCount.store(1u);
|
csr.taskCount.store(1u);
|
||||||
@@ -243,9 +238,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndAdjustOn
|
|||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
controller.setTimeoutParamsForPlatform(csr.getProductHelper());
|
controller.setTimeoutParamsForPlatform(csr.getProductHelper());
|
||||||
controller.keepControlling.store(false);
|
|
||||||
controller.directSubmissionControllingThread->join();
|
|
||||||
controller.directSubmissionControllingThread.reset();
|
|
||||||
controller.registerDirectSubmission(&csr);
|
controller.registerDirectSubmission(&csr);
|
||||||
EXPECT_TRUE(controller.adjustTimeoutOnThrottleAndAcLineStatus);
|
EXPECT_TRUE(controller.adjustTimeoutOnThrottleAndAcLineStatus);
|
||||||
fillTimeoutParamsMap(controller);
|
fillTimeoutParamsMap(controller);
|
||||||
@@ -345,6 +337,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndAdjustOn
|
|||||||
|
|
||||||
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStartedControllingWhenShuttingDownThenNoHang) {
|
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStartedControllingWhenShuttingDownThenNoHang) {
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
|
controller.startThread();
|
||||||
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
|
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
|
||||||
|
|
||||||
while (!controller.sleepCalled) {
|
while (!controller.sleepCalled) {
|
||||||
@@ -391,9 +384,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste
|
|||||||
csr4.setupContext(*osContext4.get());
|
csr4.setupContext(*osContext4.get());
|
||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
controller.keepControlling.store(false);
|
|
||||||
controller.directSubmissionControllingThread->join();
|
|
||||||
controller.directSubmissionControllingThread.reset();
|
|
||||||
|
|
||||||
EXPECT_EQ(controller.timeout.count(), 5'000);
|
EXPECT_EQ(controller.timeout.count(), 5'000);
|
||||||
|
|
||||||
@@ -495,9 +485,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste
|
|||||||
csr10.setupContext(*osContext10.get());
|
csr10.setupContext(*osContext10.get());
|
||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
controller.keepControlling.store(false);
|
|
||||||
controller.directSubmissionControllingThread->join();
|
|
||||||
controller.directSubmissionControllingThread.reset();
|
|
||||||
|
|
||||||
EXPECT_EQ(controller.timeout.count(), 5'000);
|
EXPECT_EQ(controller.timeout.count(), 5'000);
|
||||||
|
|
||||||
@@ -578,9 +565,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerDirectSubmi
|
|||||||
csr4.setupContext(*osContext4.get());
|
csr4.setupContext(*osContext4.get());
|
||||||
|
|
||||||
DirectSubmissionControllerMock controller;
|
DirectSubmissionControllerMock controller;
|
||||||
controller.keepControlling.store(false);
|
|
||||||
controller.directSubmissionControllingThread->join();
|
|
||||||
controller.directSubmissionControllingThread.reset();
|
|
||||||
|
|
||||||
EXPECT_EQ(controller.timeout.count(), 5'000);
|
EXPECT_EQ(controller.timeout.count(), 5'000);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user