diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl b/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl index e9b28ee20b..9a2305f351 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl @@ -332,9 +332,7 @@ inline ze_result_t CommandListCoreFamilyImmediate::executeCommand svmAllocMgr->prefetchSVMAllocs(*this->device->getNEODevice(), *csr); } - if (cmdQ->getClientId() == CommandQueue::clientNotRegistered) { - cmdQ->setClientId(csr->registerClient()); - } + cmdQ->registerCsrClient(); std::unique_lock lockForIndirect; if (this->hasIndirectAllocationsAllowed()) { diff --git a/level_zero/core/source/cmdqueue/cmdqueue.cpp b/level_zero/core/source/cmdqueue/cmdqueue.cpp index 859b651c54..e980f83bda 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue.cpp +++ b/level_zero/core/source/cmdqueue/cmdqueue.cpp @@ -253,10 +253,11 @@ CommandQueue *CommandQueue::create(uint32_t productFamily, Device *device, NEO:: } void CommandQueueImp::unregisterCsrClient() { - if (getClientId() != CommandQueue::clientNotRegistered) { - this->csr->unregisterClient(); - setClientId(CommandQueue::clientNotRegistered); - } + this->csr->unregisterClient(this); +} + +void CommandQueueImp::registerCsrClient() { + this->csr->registerClient(this); } ze_result_t CommandQueueImp::CommandBufferManager::initialize(Device *device, size_t sizeRequested) { diff --git a/level_zero/core/source/cmdqueue/cmdqueue.h b/level_zero/core/source/cmdqueue/cmdqueue.h index ece4deca73..1717d18e85 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue.h +++ b/level_zero/core/source/cmdqueue/cmdqueue.h @@ -62,19 +62,15 @@ struct CommandQueue : _ze_command_queue_handle_t { bool peekIsCopyOnlyCommandQueue() const { return this->isCopyOnlyCommandQueue; } - uint32_t getClientId() const { return this->clientId; } - void setClientId(uint32_t value) { this->clientId = value; } virtual void unregisterCsrClient() = 0; + virtual void registerCsrClient() = 0; TaskCountType getTaskCount() const { return taskCount; } void setTaskCount(TaskCountType newTaskCount) { taskCount = newTaskCount; } - static constexpr uint32_t clientNotRegistered = std::numeric_limits::max(); - protected: bool frontEndTrackingEnabled() const; - uint32_t clientId = clientNotRegistered; uint32_t partitionCount = 1; uint32_t activeSubDevices = 1; std::atomic taskCount = 0; diff --git a/level_zero/core/source/cmdqueue/cmdqueue_hw.inl b/level_zero/core/source/cmdqueue/cmdqueue_hw.inl index 090e3fc66f..974f5040e7 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue_hw.inl +++ b/level_zero/core/source/cmdqueue/cmdqueue_hw.inl @@ -69,9 +69,7 @@ ze_result_t CommandQueueHw::executeCommandLists( svmAllocMgr->prefetchSVMAllocs(*device->getNEODevice(), *csr); } - if (this->clientId == CommandQueue::clientNotRegistered) { - this->clientId = this->csr->registerClient(); - } + registerCsrClient(); auto neoDevice = device->getNEODevice(); auto ctx = CommandListExecutionContext{phCommandLists, diff --git a/level_zero/core/source/cmdqueue/cmdqueue_imp.h b/level_zero/core/source/cmdqueue/cmdqueue_imp.h index f2939013e2..26d4fa289a 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue_imp.h +++ b/level_zero/core/source/cmdqueue/cmdqueue_imp.h @@ -98,6 +98,7 @@ struct CommandQueueImp : public CommandQueue { void printKernelsPrintfOutput(bool hangDetected); void checkAssert(); void unregisterCsrClient() override; + void registerCsrClient() override; protected: MOCKABLE_VIRTUAL NEO::SubmissionStatus submitBatchBuffer(size_t offset, NEO::ResidencyContainer &residencyContainer, void *endingCmdPtr, diff --git a/level_zero/core/source/event/event.cpp b/level_zero/core/source/event/event.cpp index 6d28c89557..542d0621cb 100644 --- a/level_zero/core/source/event/event.cpp +++ b/level_zero/core/source/event/event.cpp @@ -402,9 +402,10 @@ void Event::setLatestUsedCmdQueue(CommandQueue *newCmdQ) { } void Event::unsetCmdQueue() { - if (latestUsedCmdQueue) { - latestUsedCmdQueue->unregisterCsrClient(); + for (auto &csr : csrs) { + csr->unregisterClient(latestUsedCmdQueue); } + latestUsedCmdQueue = nullptr; } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp index 6685056c7d..723db37bb8 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp @@ -1186,7 +1186,6 @@ HWTEST2_F(CommandListCreate, givenDirectSubmissionAndImmCmdListWhenDispatchingDi auto ultCsr = static_cast *>(whiteBoxCmdList->csr); ultCsr->recordFlusheBatchBuffer = true; - ultCsr->unregisterClient(); EXPECT_FALSE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); @@ -1285,8 +1284,9 @@ HWTEST2_F(CommandListCreate, whenDispatchingThenPassNumCsrClients, IsAtLeastXeHp auto ultCsr = static_cast *>(whiteBoxCmdList->csr); ultCsr->recordFlusheBatchBuffer = true; - ultCsr->registerClient(); - ultCsr->registerClient(); + int client1, client2; + ultCsr->registerClient(&client1); + ultCsr->registerClient(&client2); auto result = commandList->appendLaunchKernel(kernel.toHandle(), &groupCount, nullptr, 0, nullptr, launchParams, false); @@ -1444,8 +1444,9 @@ HWTEST2_F(CommandListCreate, givenDirectSubmissionAndImmCmdListWhenDispatchingTh auto directSubmission = new MockDirectSubmissionHw>(*ultCsr); ultCsr->directSubmission.reset(directSubmission); - ultCsr->registerClient(); - ultCsr->registerClient(); + int client1, client2; + ultCsr->registerClient(&client1); + ultCsr->registerClient(&client2); auto verifyFlags = [&ultCsr, useImmediateFlushTask](ze_result_t result, bool dispatchFlag, bool bbFlag) { EXPECT_EQ(ZE_RESULT_SUCCESS, result); @@ -1566,8 +1567,9 @@ HWTEST2_F(CommandListCreate, givenInOrderExecutionWhenDispatchingRelaxedOrdering auto directSubmission = new MockDirectSubmissionHw>(*ultCsr); ultCsr->directSubmission.reset(directSubmission); - ultCsr->registerClient(); - ultCsr->registerClient(); + int client1, client2; + ultCsr->registerClient(&client1); + ultCsr->registerClient(&client2); commandList->appendLaunchKernel(kernel.toHandle(), &groupCount, event, 0, nullptr, launchParams, false); @@ -1614,8 +1616,9 @@ HWTEST2_F(CommandListCreate, givenInOrderExecutionWhenDispatchingBarrierThenAllo auto directSubmission = new MockDirectSubmissionHw>(*ultCsr); ultCsr->directSubmission.reset(directSubmission); - ultCsr->registerClient(); - ultCsr->registerClient(); + int client1, client2; + ultCsr->registerClient(&client1); + ultCsr->registerClient(&client2); // Initialize NP state commandList->appendBarrier(nullptr, 1, &event, false); @@ -1673,8 +1676,9 @@ HWTEST2_F(CommandListCreate, givenInOrderExecutionWhenDispatchingRelaxedOrdering auto directSubmission = new MockDirectSubmissionHw>(*ultCsr); ultCsr->directSubmission.reset(directSubmission); - ultCsr->registerClient(); - ultCsr->registerClient(); + int client1, client2; + ultCsr->registerClient(&client1); + ultCsr->registerClient(&client2); auto cmdStream = cmdList->getCmdContainer().getCommandStream(); diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp index 016f1e6e77..6961ea7864 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp @@ -2944,7 +2944,8 @@ HWTEST2_F(ImmediateCommandListHostSynchronize, givenCsrClientCountWhenCallingSyn auto cmdList = createCmdList(csr); - cmdList->cmdQImmediate->setClientId(csr->registerClient()); + cmdList->cmdQImmediate->registerCsrClient(); + auto clientCount = csr->getNumClients(); EXPECT_EQ(cmdList->hostSynchronize(0), ZE_RESULT_SUCCESS); @@ -2955,7 +2956,8 @@ HWTEST2_F(ImmediateCommandListHostSynchronize, givenCsrClientCountWhenCallingSyn EXPECT_EQ(clientCount - 1, csr->getNumClients()); - cmdList->cmdQImmediate->setClientId(csr->registerClient()); + cmdList->cmdQImmediate->registerCsrClient(); + clientCount = csr->getNumClients(); csr->callBaseWaitForCompletionWithTimeout = false; diff --git a/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp b/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp index 7ce4ca8ef9..73190c9aa7 100644 --- a/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp +++ b/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp @@ -715,7 +715,8 @@ HWTEST2_F(CommandQueueCommandsXeHpc, givenFlushTaskSubmissionEnabledAndSplitBcsC context->allocHostMem(&hostDesc, size, alignment, &dstPtr); auto ultCsr = static_cast *>(whiteBoxCmdList->csr); ultCsr->recordFlusheBatchBuffer = true; - ultCsr->registerClient(); + int client; + ultCsr->registerClient(&client); auto result = commandList0->appendMemoryCopy(dstPtr, srcPtr, size, nullptr, 0, nullptr, false, false); ASSERT_EQ(ZE_RESULT_SUCCESS, result); @@ -778,8 +779,9 @@ HWTEST2_F(CommandQueueCommandsXeHpc, givenFlushTaskSubmissionEnabledAndSplitBcsC context->allocHostMem(&hostDesc, size, alignment, &dstPtr); auto ultCsr = static_cast *>(whiteBoxCmdList->csr); ultCsr->recordFlusheBatchBuffer = true; - ultCsr->registerClient(); - ultCsr->registerClient(); + int client1, client2; + ultCsr->registerClient(&client1); + ultCsr->registerClient(&client2); auto directSubmission = new MockDirectSubmissionHw>(*ultCsr); ultCsr->directSubmission.reset(directSubmission); diff --git a/opencl/source/command_queue/command_queue.cpp b/opencl/source/command_queue/command_queue.cpp index 5e2e046e40..09ef17f43b 100644 --- a/opencl/source/command_queue/command_queue.cpp +++ b/opencl/source/command_queue/command_queue.cpp @@ -1404,7 +1404,7 @@ void CommandQueue::registerGpgpuCsrClient() { if (!gpgpuCsrClientRegistered) { gpgpuCsrClientRegistered = true; - getGpgpuCommandStreamReceiver().registerClient(); + getGpgpuCommandStreamReceiver().registerClient(this); } } @@ -1415,13 +1415,13 @@ void CommandQueue::registerBcsCsrClient(CommandStreamReceiver &bcsCsr) { if (!bcsState.csrClientRegistered) { bcsState.csrClientRegistered = true; - bcsCsr.registerClient(); + bcsCsr.registerClient(this); } } void CommandQueue::unregisterGpgpuCsrClient() { if (gpgpuCsrClientRegistered) { - gpgpuEngine->commandStreamReceiver->unregisterClient(); + gpgpuEngine->commandStreamReceiver->unregisterClient(this); gpgpuCsrClientRegistered = false; } } @@ -1432,7 +1432,7 @@ void CommandQueue::unregisterBcsCsrClient(CommandStreamReceiver &bcsCsr) { auto &bcsState = bcsStates[EngineHelpers::getBcsIndex(engineType)]; if (bcsState.isValid() && bcsState.csrClientRegistered) { - bcsCsr.unregisterClient(); + bcsCsr.unregisterClient(this); bcsState.csrClientRegistered = false; } } diff --git a/opencl/test/unit_test/command_queue/command_queue_hw_1_tests.cpp b/opencl/test/unit_test/command_queue/command_queue_hw_1_tests.cpp index b5b6a52cac..750df000fc 100644 --- a/opencl/test/unit_test/command_queue/command_queue_hw_1_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_hw_1_tests.cpp @@ -1254,11 +1254,12 @@ HWTEST_F(CommandQueueHwTest, givenRelaxedOrderingEnabledWhenCheckingIfAllowedByC EXPECT_FALSE(mockCmdQueueHw.relaxedOrderingForGpgpuAllowed(0)); EXPECT_FALSE(mockCmdQueueHw.relaxedOrderingForGpgpuAllowed(1)); - ultCsr.registerClient(); + int client1, client2; + ultCsr.registerClient(&client1); EXPECT_FALSE(mockCmdQueueHw.relaxedOrderingForGpgpuAllowed(0)); EXPECT_FALSE(mockCmdQueueHw.relaxedOrderingForGpgpuAllowed(1)); - ultCsr.registerClient(); + ultCsr.registerClient(&client2); EXPECT_FALSE(mockCmdQueueHw.relaxedOrderingForGpgpuAllowed(0)); EXPECT_TRUE(mockCmdQueueHw.relaxedOrderingForGpgpuAllowed(1)); diff --git a/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp index cc4832c60e..b6c911a3c3 100644 --- a/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp @@ -1138,8 +1138,9 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueKernelWhenProgrammingDe auto &ultCsr = pDevice->getUltCommandStreamReceiver(); auto directSubmission = new MockDirectSubmissionHw>(ultCsr); ultCsr.directSubmission.reset(directSubmission); - ultCsr.registerClient(); - ultCsr.registerClient(); + int client1, client2; + ultCsr.registerClient(&client1); + ultCsr.registerClient(&client2); MockCommandQueueHw mockCmdQueueHw{context, pClDevice, nullptr}; @@ -1237,8 +1238,9 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenBarrierWithDependenciesWhenFlu auto &ultCsr = pDevice->getUltCommandStreamReceiver(); auto directSubmission = new MockDirectSubmissionHw>(ultCsr); ultCsr.directSubmission.reset(directSubmission); - ultCsr.registerClient(); - ultCsr.registerClient(); + int client1, client2; + ultCsr.registerClient(&client1); + ultCsr.registerClient(&client2); MockCommandQueueHw mockCmdQueueHw{context, pClDevice, nullptr}; @@ -1284,8 +1286,9 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenPipeControlForIoqDependencyRes auto &ultCsr = pDevice->getUltCommandStreamReceiver(); auto directSubmission = new MockDirectSubmissionHw>(ultCsr); ultCsr.directSubmission.reset(directSubmission); - ultCsr.registerClient(); - ultCsr.registerClient(); + int client1, client2; + ultCsr.registerClient(&client1); + ultCsr.registerClient(&client2); MockKernelWithInternals mockKernel(*pClDevice); @@ -1304,8 +1307,9 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueWithPipeControlWhenSend auto &ultCsr = pDevice->getUltCommandStreamReceiver(); auto directSubmission = new MockDirectSubmissionHw>(ultCsr); ultCsr.directSubmission.reset(directSubmission); - ultCsr.registerClient(); - ultCsr.registerClient(); + int client1, client2; + ultCsr.registerClient(&client1); + ultCsr.registerClient(&client2); ultCsr.recordFlusheBatchBuffer = true; diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_1_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_1_tests.cpp index a8b25aa64c..f7211e5b7c 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_1_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_1_tests.cpp @@ -1085,8 +1085,9 @@ HWTEST2_F(RelaxedOrderingBcsTests, givenDependenciesWhenFlushingThenProgramCorre ASSERT_EQ(CL_SUCCESS, retVal); auto &csr = pDevice->getUltCommandStreamReceiver(); - csr.registerClient(); - csr.registerClient(); + int client1, client2; + csr.registerClient(&client1); + csr.registerClient(&client2); csr.recordFlusheBatchBuffer = true; csr.blitterDirectSubmission = std::make_unique>>(csr); @@ -1127,8 +1128,9 @@ HWTEST2_F(RelaxedOrderingBcsTests, givenDependenciesWhenFlushingThenProgramProgr ASSERT_EQ(CL_SUCCESS, retVal); auto &csr = pDevice->getUltCommandStreamReceiver(); - csr.registerClient(); - csr.registerClient(); + int client1, client2; + csr.registerClient(&client1); + csr.registerClient(&client1); csr.recordFlusheBatchBuffer = true; csr.blitterDirectSubmission = std::make_unique>>(csr); @@ -1152,12 +1154,12 @@ HWTEST2_F(RelaxedOrderingBcsTests, givenDependenciesWhenFlushingThenProgramProgr EXPECT_FALSE(csr.bcsRelaxedOrderingAllowed(blitPropertiesContainer, false)); blitPropertiesContainer.push_back(blitProperties); - csr.unregisterClient(); - csr.unregisterClient(); + csr.unregisterClient(&client1); + csr.unregisterClient(&client2); EXPECT_FALSE(csr.bcsRelaxedOrderingAllowed(blitPropertiesContainer, false)); - csr.registerClient(); - csr.registerClient(); + csr.registerClient(&client1); + csr.registerClient(&client2); csr.blitterDirectSubmission.reset(); EXPECT_FALSE(csr.bcsRelaxedOrderingAllowed(blitPropertiesContainer, false)); } @@ -1168,8 +1170,9 @@ HWTEST2_F(RelaxedOrderingBcsTests, givenTagUpdateWhenFlushingThenDisableRelaxedO ASSERT_EQ(CL_SUCCESS, retVal); auto &csr = pDevice->getUltCommandStreamReceiver(); - csr.registerClient(); - csr.registerClient(); + int client1, client2; + csr.registerClient(&client1); + csr.registerClient(&client2); csr.recordFlusheBatchBuffer = true; csr.blitterDirectSubmission = std::make_unique>>(csr); diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp index e9d081351f..0d4d36e497 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp @@ -708,8 +708,11 @@ HWTEST_F(BcsTests, givenTaskStreamWhenFlushingThenPassNumClients) { graphicsAllocation->getGpuAddress(), 0, 0, 0, {1, 1, 1}, 0, 0, 0, 0); - csr.registerClient(); - csr.registerClient(); + int client1, client2; + csr.registerClient(&client1); + csr.registerClient(&client2); + + EXPECT_EQ(2u, csr.getNumClients()); flushBcsTask(&csr, blitProperties, true, *pDevice); diff --git a/shared/source/command_stream/command_stream_receiver.cpp b/shared/source/command_stream/command_stream_receiver.cpp index e662a38ace..b73d855d95 100644 --- a/shared/source/command_stream/command_stream_receiver.cpp +++ b/shared/source/command_stream/command_stream_receiver.cpp @@ -94,6 +94,8 @@ CommandStreamReceiver::CommandStreamReceiver(ExecutionEnvironment &executionEnvi productHelper.fillStateBaseAddressPropertiesSupportStructure(sbaSupportFlags); this->doubleSbaWa = productHelper.isAdditionalStateBaseAddressWARequired(hwInfo); this->l1CachePolicyData.init(productHelper); + + registeredClients.reserve(16); } CommandStreamReceiver::~CommandStreamReceiver() { @@ -1070,5 +1072,24 @@ bool CommandStreamReceiver::isRayTracingStateProgramingNeeded(Device &device) co return device.getRTMemoryBackedBuffer() && getBtdCommandDirty(); } +void CommandStreamReceiver::registerClient(void *client) { + std::unique_lock lock(registeredClientsMutex); + auto element = std::find(registeredClients.begin(), registeredClients.end(), client); + if (element == registeredClients.end()) { + registeredClients.push_back(client); + numClients++; + } +} + +void CommandStreamReceiver::unregisterClient(void *client) { + std::unique_lock lock(registeredClientsMutex); + + auto element = std::find(registeredClients.begin(), registeredClients.end(), client); + if (element != registeredClients.end()) { + registeredClients.erase(element); + numClients--; + } +} + std::function CommandStreamReceiver::debugConfirmationFunction = []() { std::cin.get(); }; } // namespace NEO diff --git a/shared/source/command_stream/command_stream_receiver.h b/shared/source/command_stream/command_stream_receiver.h index 53af4d9c6e..102d9a7ada 100644 --- a/shared/source/command_stream/command_stream_receiver.h +++ b/shared/source/command_stream/command_stream_receiver.h @@ -404,12 +404,8 @@ class CommandStreamReceiver { uint32_t getNumClients() const { return this->numClients.load(); } - uint32_t registerClient() { - return this->numClients.fetch_add(1u); - } - void unregisterClient() { - this->numClients--; - } + void registerClient(void *client); + void unregisterClient(void *client); bool getDcFlushSupport() const { return dcFlushSupport; @@ -443,6 +439,8 @@ class CommandStreamReceiver { void printTagAddressContent(TaskCountType taskCountToWait, int64_t waitTimeout, bool start); [[nodiscard]] MOCKABLE_VIRTUAL std::unique_lock obtainHostPtrSurfaceCreationLock(); + std::vector registeredClients; + std::unique_ptr flushStamp; std::unique_ptr submissionAggregator; std::unique_ptr flatBatchBufferHelper; @@ -462,6 +460,7 @@ class CommandStreamReceiver { MutexType ownershipMutex; MutexType hostPtrSurfaceCreationMutex; + MutexType registeredClientsMutex; ExecutionEnvironment &executionEnvironment; LinearStream commandStream; diff --git a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp index 6bfd61c9ab..c2319515b6 100644 --- a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -176,16 +176,29 @@ HWTEST_F(CommandStreamReceiverTest, whenRegisterClientThenIncrementClientNum) { auto &csr = pDevice->getUltCommandStreamReceiver(); auto numClients = csr.getNumClients(); - csr.registerClient(); + int client1, client2; + csr.registerClient(&client1); EXPECT_EQ(csr.getNumClients(), numClients + 1); - csr.registerClient(); + csr.registerClient(&client1); + EXPECT_EQ(csr.getNumClients(), numClients + 1); + + csr.registerClient(&client2); EXPECT_EQ(csr.getNumClients(), numClients + 2); - csr.unregisterClient(); + csr.registerClient(&client2); + EXPECT_EQ(csr.getNumClients(), numClients + 2); + + csr.unregisterClient(&client1); EXPECT_EQ(csr.getNumClients(), numClients + 1); - csr.unregisterClient(); + csr.unregisterClient(&client1); + EXPECT_EQ(csr.getNumClients(), numClients + 1); + + csr.unregisterClient(&client2); + EXPECT_EQ(csr.getNumClients(), numClients); + + csr.unregisterClient(&client2); EXPECT_EQ(csr.getNumClients(), numClients); } @@ -2892,8 +2905,9 @@ HWTEST_F(CommandStreamReceiverHwTest, whenFlushTagUpdateThenSetPassNumClients) { ultCsr.recordFlusheBatchBuffer = true; - ultCsr.registerClient(); - ultCsr.registerClient(); + int client1, client2; + ultCsr.registerClient(&client1); + ultCsr.registerClient(&client2); EXPECT_EQ(SubmissionStatus::SUCCESS, ultCsr.flushTagUpdate()); @@ -2904,8 +2918,9 @@ HWTEST_F(CommandStreamReceiverHwTest, whenFlushTaskCalledThenSetPassNumClients) auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); commandStreamReceiver.recordFlusheBatchBuffer = true; - commandStreamReceiver.registerClient(); - commandStreamReceiver.registerClient(); + int client1, client2; + commandStreamReceiver.registerClient(&client1); + commandStreamReceiver.registerClient(&client2); commandStreamReceiver.flushTask(commandStream, 0, diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp index e7b47302c0..3349b0d009 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp @@ -2704,7 +2704,8 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenReturnPtrsRequiredWhenAskin HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenNumClientsWhenAskingIfRelaxedOrderingEnabledThenReturnCorrectValue, IsAtLeastXeHpcCore) { auto ultCsr = static_cast *>(pDevice->getDefaultEngine().commandStreamReceiver); - ultCsr->registerClient(); + int client1, client2, client3, client4; + ultCsr->registerClient(&client1); auto directSubmission = new NEO::MockDirectSubmissionHw>(*ultCsr); ultCsr->directSubmission.reset(directSubmission); @@ -2712,7 +2713,7 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenNumClientsWhenAskingIfRelax EXPECT_EQ(1u, ultCsr->getNumClients()); EXPECT_FALSE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); - ultCsr->registerClient(); + ultCsr->registerClient(&client2); EXPECT_EQ(2u, ultCsr->getNumClients()); EXPECT_TRUE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); @@ -2722,11 +2723,11 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenNumClientsWhenAskingIfRelax EXPECT_EQ(2u, ultCsr->getNumClients()); EXPECT_FALSE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); - ultCsr->registerClient(); + ultCsr->registerClient(&client3); EXPECT_EQ(3u, ultCsr->getNumClients()); EXPECT_FALSE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); - ultCsr->registerClient(); + ultCsr->registerClient(&client4); EXPECT_EQ(4u, ultCsr->getNumClients()); EXPECT_TRUE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); } \ No newline at end of file