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) {
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);

View File

@ -558,7 +558,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCommandStreamReceiverWhenFenc
EXPECT_FALSE(csr.isMadeResident(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.isMadeNonResident(csr.globalFenceAllocation));
@ -575,7 +575,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCommandStreamReceiverWhenFenc
EXPECT_EQ(nullptr, csr.globalFenceAllocation);
flushSmallTask(csr);
EXPECT_EQ(SubmissionStatus::SUCCESS, flushSmallTask(csr));
ASSERT_EQ(nullptr, csr.globalFenceAllocation);
}

View File

@ -157,7 +157,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, whenFlushSmallTaskThenCommandStrea
auto &stream = csr.getCS(2 * MemoryConstants::cacheLineSize);
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 expected = 2 * MemoryConstants::cacheLineSize;

View File

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

View File

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

View File

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

View File

@ -504,7 +504,7 @@ class CommandStreamReceiverMock : public CommandStreamReceiver {
TagAllocatorBase *getTimestampPacketAllocator() override { return nullptr; }
void flushTagUpdate() override{};
SubmissionStatus flushTagUpdate() override { return SubmissionStatus::SUCCESS; };
void updateTagFromWait() override{};
bool isUpdateTagFromWaitEnabled() override { return false; };
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 void flushTagUpdate() = 0;
virtual SubmissionStatus flushTagUpdate() = 0;
virtual void updateTagFromWait() = 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;
void flushTagUpdate() override;
void flushMiFlushDW();
void flushPipeControl();
void flushSmallTask(LinearStream &commandStreamTask,
SubmissionStatus flushTagUpdate() override;
SubmissionStatus flushMiFlushDW();
SubmissionStatus flushPipeControl();
SubmissionStatus flushSmallTask(LinearStream &commandStreamTask,
size_t commandStreamStartTask);
SubmissionStatus flushHandler(BatchBuffer &batchBuffer, ResidencyContainer &allocationsForResidency);

View File

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

View File

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

View File

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

View File

@ -2378,3 +2378,36 @@ HWTEST_F(CommandStreamReceiverHwTest, givenOutOfDeviceMemoryFailureOnFlushWhenFl
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());
}