Return submission status from flushTagUpdate method

Related-To: NEO-7412
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2022-11-09 11:18:06 +00:00
committed by Compute-Runtime-Automation
parent 6b64c1b04b
commit 57cea7365e
13 changed files with 65 additions and 27 deletions

View File

@ -219,7 +219,7 @@ HWTEST_TEMPLATED_F(BlitAuxTranslationTests, givenBlitTranslationWhenConstructing
HWTEST_TEMPLATED_F(BlitAuxTranslationTests, whenFlushTagUpdateThenMiFlushDwIsFlushed) { HWTEST_TEMPLATED_F(BlitAuxTranslationTests, whenFlushTagUpdateThenMiFlushDwIsFlushed) {
using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW; using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW;
bcsCsr->flushTagUpdate(); EXPECT_EQ(SubmissionStatus::SUCCESS, bcsCsr->flushTagUpdate());
auto cmdListBcs = getCmdList<FamilyType>(bcsCsr->getCS(0), 0); auto cmdListBcs = getCmdList<FamilyType>(bcsCsr->getCS(0), 0);

View File

@ -558,7 +558,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCommandStreamReceiverWhenFenc
EXPECT_FALSE(csr.isMadeResident(csr.globalFenceAllocation)); EXPECT_FALSE(csr.isMadeResident(csr.globalFenceAllocation));
EXPECT_FALSE(csr.isMadeNonResident(csr.globalFenceAllocation)); EXPECT_FALSE(csr.isMadeNonResident(csr.globalFenceAllocation));
flushSmallTask(csr); EXPECT_EQ(SubmissionStatus::SUCCESS, flushSmallTask(csr));
EXPECT_TRUE(csr.isMadeResident(csr.globalFenceAllocation)); EXPECT_TRUE(csr.isMadeResident(csr.globalFenceAllocation));
EXPECT_TRUE(csr.isMadeNonResident(csr.globalFenceAllocation)); EXPECT_TRUE(csr.isMadeNonResident(csr.globalFenceAllocation));
@ -575,7 +575,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCommandStreamReceiverWhenFenc
EXPECT_EQ(nullptr, csr.globalFenceAllocation); EXPECT_EQ(nullptr, csr.globalFenceAllocation);
flushSmallTask(csr); EXPECT_EQ(SubmissionStatus::SUCCESS, flushSmallTask(csr));
ASSERT_EQ(nullptr, csr.globalFenceAllocation); ASSERT_EQ(nullptr, csr.globalFenceAllocation);
} }

View File

@ -157,7 +157,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, whenFlushSmallTaskThenCommandStrea
auto &stream = csr.getCS(2 * MemoryConstants::cacheLineSize); auto &stream = csr.getCS(2 * MemoryConstants::cacheLineSize);
stream.getSpace(MemoryConstants::cacheLineSize - sizeof(MI_BATCH_BUFFER_END) - 2); stream.getSpace(MemoryConstants::cacheLineSize - sizeof(MI_BATCH_BUFFER_END) - 2);
csr.flushSmallTask(stream, stream.getUsed()); EXPECT_EQ(SubmissionStatus::SUCCESS, csr.flushSmallTask(stream, stream.getUsed()));
auto used = csr.commandStream.getUsed(); auto used = csr.commandStream.getUsed();
auto expected = 2 * MemoryConstants::cacheLineSize; auto expected = 2 * MemoryConstants::cacheLineSize;

View File

@ -972,7 +972,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverFlushTaskXeHPAndLaterMultiTile
commandStreamReceiver.taskCount = 3; commandStreamReceiver.taskCount = 3;
EXPECT_TRUE(commandStreamReceiver.staticWorkPartitioningEnabled); EXPECT_TRUE(commandStreamReceiver.staticWorkPartitioningEnabled);
flushTask(commandStreamReceiver, true); flushTask(commandStreamReceiver, true);
commandStreamReceiver.flushTagUpdate(); EXPECT_EQ(SubmissionStatus::SUCCESS, commandStreamReceiver.flushTagUpdate());
EXPECT_EQ(2u, commandStreamReceiver.activePartitionsConfig); EXPECT_EQ(2u, commandStreamReceiver.activePartitionsConfig);
prepareLinearStream<FamilyType>(commandStream, 0); prepareLinearStream<FamilyType>(commandStream, 0);
@ -1065,7 +1065,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverFlushTaskXeHPAndLaterMultiTile
commandStreamReceiver.activePartitions = 2; commandStreamReceiver.activePartitions = 2;
commandStreamReceiver.taskCount = 3; commandStreamReceiver.taskCount = 3;
commandStreamReceiver.staticWorkPartitioningEnabled = false; commandStreamReceiver.staticWorkPartitioningEnabled = false;
commandStreamReceiver.flushTagUpdate(); EXPECT_EQ(SubmissionStatus::SUCCESS, commandStreamReceiver.flushTagUpdate());
prepareLinearStream<FamilyType>(commandStreamReceiver.commandStream, 0); prepareLinearStream<FamilyType>(commandStreamReceiver.commandStream, 0);
verifyPipeControl<FamilyType>(commandStreamReceiver, 4, false); verifyPipeControl<FamilyType>(commandStreamReceiver, 4, false);

View File

@ -1465,7 +1465,7 @@ HWTEST_F(BcsTests, givenBlitterDirectSubmissionEnabledWhenFlushTagUpdateThenBatc
bool initRet = directSubmission->initialize(true, false); bool initRet = directSubmission->initialize(true, false);
EXPECT_TRUE(initRet); EXPECT_TRUE(initRet);
csr.flushTagUpdate(); EXPECT_EQ(SubmissionStatus::SUCCESS, csr.flushTagUpdate());
HardwareParse hwParser; HardwareParse hwParser;
hwParser.parseCommands<FamilyType>(csr.commandStream, 0u); hwParser.parseCommands<FamilyType>(csr.commandStream, 0u);

View File

@ -110,7 +110,7 @@ struct UltCommandStreamReceiverTest
} }
template <typename CommandStreamReceiverType> template <typename CommandStreamReceiverType>
void flushSmallTask(CommandStreamReceiverType &commandStreamReceiver, SubmissionStatus flushSmallTask(CommandStreamReceiverType &commandStreamReceiver,
size_t startOffset = 0) { size_t startOffset = 0) {
return commandStreamReceiver.flushSmallTask( return commandStreamReceiver.flushSmallTask(
commandStream, commandStream,

View File

@ -504,7 +504,7 @@ class CommandStreamReceiverMock : public CommandStreamReceiver {
TagAllocatorBase *getTimestampPacketAllocator() override { return nullptr; } TagAllocatorBase *getTimestampPacketAllocator() override { return nullptr; }
void flushTagUpdate() override{}; SubmissionStatus flushTagUpdate() override { return SubmissionStatus::SUCCESS; };
void updateTagFromWait() override{}; void updateTagFromWait() override{};
bool isUpdateTagFromWaitEnabled() override { return false; }; bool isUpdateTagFromWaitEnabled() override { return false; };
void createKernelArgsBufferAllocation() override {} void createKernelArgsBufferAllocation() override {}

View File

@ -233,7 +233,7 @@ class CommandStreamReceiver {
virtual uint32_t flushBcsTask(const BlitPropertiesContainer &blitPropertiesContainer, bool blocking, bool profilingEnabled, Device &device) = 0; virtual uint32_t flushBcsTask(const BlitPropertiesContainer &blitPropertiesContainer, bool blocking, bool profilingEnabled, Device &device) = 0;
virtual void flushTagUpdate() = 0; virtual SubmissionStatus flushTagUpdate() = 0;
virtual void updateTagFromWait() = 0; virtual void updateTagFromWait() = 0;
virtual bool isUpdateTagFromWaitEnabled() = 0; virtual bool isUpdateTagFromWaitEnabled() = 0;

View File

@ -99,10 +99,10 @@ class CommandStreamReceiverHw : public CommandStreamReceiver {
uint32_t flushBcsTask(const BlitPropertiesContainer &blitPropertiesContainer, bool blocking, bool profilingEnabled, Device &device) override; uint32_t flushBcsTask(const BlitPropertiesContainer &blitPropertiesContainer, bool blocking, bool profilingEnabled, Device &device) override;
void flushTagUpdate() override; SubmissionStatus flushTagUpdate() override;
void flushMiFlushDW(); SubmissionStatus flushMiFlushDW();
void flushPipeControl(); SubmissionStatus flushPipeControl();
void flushSmallTask(LinearStream &commandStreamTask, SubmissionStatus flushSmallTask(LinearStream &commandStreamTask,
size_t commandStreamStartTask); size_t commandStreamStartTask);
SubmissionStatus flushHandler(BatchBuffer &batchBuffer, ResidencyContainer &allocationsForResidency); SubmissionStatus flushHandler(BatchBuffer &batchBuffer, ResidencyContainer &allocationsForResidency);

View File

@ -1195,18 +1195,19 @@ uint32_t CommandStreamReceiverHw<GfxFamily>::flushBcsTask(const BlitPropertiesCo
} }
template <typename GfxFamily> template <typename GfxFamily>
inline void CommandStreamReceiverHw<GfxFamily>::flushTagUpdate() { inline SubmissionStatus CommandStreamReceiverHw<GfxFamily>::flushTagUpdate() {
if (this->osContext != nullptr) { if (this->osContext != nullptr) {
if (EngineHelpers::isBcs(this->osContext->getEngineType())) { if (EngineHelpers::isBcs(this->osContext->getEngineType())) {
this->flushMiFlushDW(); return this->flushMiFlushDW();
} else { } else {
this->flushPipeControl(); return this->flushPipeControl();
} }
} }
return SubmissionStatus::DEVICE_UNINITIALIZED;
} }
template <typename GfxFamily> template <typename GfxFamily>
inline void CommandStreamReceiverHw<GfxFamily>::flushMiFlushDW() { inline SubmissionStatus CommandStreamReceiverHw<GfxFamily>::flushMiFlushDW() {
auto lock = obtainUniqueOwnership(); auto lock = obtainUniqueOwnership();
auto &commandStream = getCS(EncodeMiFlushDW<GfxFamily>::getMiFlushDwCmdSizeForDataWrite()); auto &commandStream = getCS(EncodeMiFlushDW<GfxFamily>::getMiFlushDwCmdSizeForDataWrite());
@ -1220,12 +1221,13 @@ inline void CommandStreamReceiverHw<GfxFamily>::flushMiFlushDW() {
makeResident(*tagAllocation); makeResident(*tagAllocation);
this->flushSmallTask(commandStream, commandStreamStart); auto submissionStatus = this->flushSmallTask(commandStream, commandStreamStart);
this->latestFlushedTaskCount = taskCount.load(); this->latestFlushedTaskCount = taskCount.load();
return submissionStatus;
} }
template <typename GfxFamily> template <typename GfxFamily>
void CommandStreamReceiverHw<GfxFamily>::flushPipeControl() { SubmissionStatus CommandStreamReceiverHw<GfxFamily>::flushPipeControl() {
auto lock = obtainUniqueOwnership(); auto lock = obtainUniqueOwnership();
const auto &hwInfo = peekHwInfo(); const auto &hwInfo = peekHwInfo();
@ -1247,12 +1249,13 @@ void CommandStreamReceiverHw<GfxFamily>::flushPipeControl() {
makeResident(*tagAllocation); makeResident(*tagAllocation);
this->flushSmallTask(commandStream, commandStreamStart); auto submissionStatus = this->flushSmallTask(commandStream, commandStreamStart);
this->latestFlushedTaskCount = taskCount.load(); this->latestFlushedTaskCount = taskCount.load();
return submissionStatus;
} }
template <typename GfxFamily> template <typename GfxFamily>
void CommandStreamReceiverHw<GfxFamily>::flushSmallTask(LinearStream &commandStreamTask, size_t commandStreamStartTask) { SubmissionStatus CommandStreamReceiverHw<GfxFamily>::flushSmallTask(LinearStream &commandStreamTask, size_t commandStreamStartTask) {
using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START; using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START;
using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END; using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END;
@ -1272,8 +1275,9 @@ void CommandStreamReceiverHw<GfxFamily>::flushSmallTask(LinearStream &commandStr
commandStreamTask.getUsed(), &commandStreamTask, endingCmdPtr, false}; commandStreamTask.getUsed(), &commandStreamTask, endingCmdPtr, false};
this->latestSentTaskCount = taskCount + 1; this->latestSentTaskCount = taskCount + 1;
flushHandler(batchBuffer, getResidencyAllocations()); auto submissionStatus = flushHandler(batchBuffer, getResidencyAllocations());
taskCount++; taskCount++;
return submissionStatus;
} }
template <typename GfxFamily> template <typename GfxFamily>

View File

@ -64,7 +64,7 @@ class MockCommandStreamReceiver : public CommandStreamReceiver {
SubmissionStatus flush(BatchBuffer &batchBuffer, ResidencyContainer &allocationsForResidency) override; SubmissionStatus flush(BatchBuffer &batchBuffer, ResidencyContainer &allocationsForResidency) override;
void flushTagUpdate() override{}; SubmissionStatus flushTagUpdate() override { return SubmissionStatus::SUCCESS; };
void updateTagFromWait() override{}; void updateTagFromWait() override{};
bool isUpdateTagFromWaitEnabled() override { return false; }; bool isUpdateTagFromWaitEnabled() override { return false; };

View File

@ -98,8 +98,9 @@ struct MockTbxCsrRegisterDownloadedAllocations : TbxCommandStreamReceiverHw<GfxF
flushBatchedSubmissionsCalled = true; flushBatchedSubmissionsCalled = true;
return true; return true;
} }
void flushTagUpdate() override { SubmissionStatus flushTagUpdate() override {
flushTagCalled = true; flushTagCalled = true;
return SubmissionStatus::SUCCESS;
} }
std::unique_lock<CommandStreamReceiver::MutexType> obtainUniqueOwnership() override { std::unique_lock<CommandStreamReceiver::MutexType> obtainUniqueOwnership() override {

View File

@ -2378,3 +2378,36 @@ HWTEST_F(CommandStreamReceiverHwTest, givenOutOfDeviceMemoryFailureOnFlushWhenFl
EXPECT_EQ(CompletionStamp::outOfDeviceMemory, completionStamp.taskCount); EXPECT_EQ(CompletionStamp::outOfDeviceMemory, completionStamp.taskCount);
} }
HWTEST_F(CommandStreamReceiverHwTest, givenOutOfMemoryFailureOnFlushWhenFlushingMiDWThenErrorIsPropagated) {
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
commandStreamReceiver.flushReturnValue = SubmissionStatus::OUT_OF_MEMORY;
EXPECT_EQ(SubmissionStatus::OUT_OF_MEMORY, commandStreamReceiver.flushMiFlushDW());
commandStreamReceiver.flushReturnValue = SubmissionStatus::OUT_OF_HOST_MEMORY;
EXPECT_EQ(SubmissionStatus::OUT_OF_HOST_MEMORY, commandStreamReceiver.flushMiFlushDW());
}
HWTEST_F(CommandStreamReceiverHwTest, givenOutOfMemoryFailureOnFlushWhenFlushingPipeControlThenErrorIsPropagated) {
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
commandStreamReceiver.flushReturnValue = SubmissionStatus::OUT_OF_MEMORY;
EXPECT_EQ(SubmissionStatus::OUT_OF_MEMORY, commandStreamReceiver.flushPipeControl());
commandStreamReceiver.flushReturnValue = SubmissionStatus::OUT_OF_HOST_MEMORY;
EXPECT_EQ(SubmissionStatus::OUT_OF_HOST_MEMORY, commandStreamReceiver.flushPipeControl());
}
HWTEST_F(CommandStreamReceiverHwTest, givenOutOfMemoryFailureOnFlushWhenFlushingTagUpdateThenErrorIsPropagated) {
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
commandStreamReceiver.flushReturnValue = SubmissionStatus::OUT_OF_MEMORY;
EXPECT_EQ(SubmissionStatus::OUT_OF_MEMORY, commandStreamReceiver.flushTagUpdate());
commandStreamReceiver.flushReturnValue = SubmissionStatus::OUT_OF_HOST_MEMORY;
EXPECT_EQ(SubmissionStatus::OUT_OF_HOST_MEMORY, commandStreamReceiver.flushTagUpdate());
}