mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
Return submission status from flushTagUpdate method
Related-To: NEO-7412 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
6b64c1b04b
commit
57cea7365e
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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 {}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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; };
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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());
|
||||
}
|
Reference in New Issue
Block a user