mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 21:18:24 +08:00
fix: wrong return value of zeCommandQueueExecuteCommandLists when OOM
zeCommandQueueExecuteCommandLists return ZE_RESULT_ERROR_UNKNOWN when OOM in some scenario of direct submission. Related-To: NEO-7840 Signed-off-by: Pan Zhenjie <zhenjie.pan@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
d77f2989c7
commit
1ce269a9dd
@@ -376,6 +376,29 @@ HWTEST_F(DrmDirectSubmissionTest, givenNoCompletionFenceSupportWhenSubmittingThe
|
||||
ringBuffer->getBufferObjectToModify(0) = initialBO;
|
||||
}
|
||||
|
||||
HWTEST_F(DrmDirectSubmissionTest, givenNoCompletionFenceSupportAndExecFailureWhenSubmittingThenGetDispatchErrorCode) {
|
||||
uint64_t gpuAddress = 0x1000;
|
||||
size_t size = 0x1000;
|
||||
DebugManagerStateRestore restorer;
|
||||
DebugManager.flags.EnableDrmCompletionFence.set(0);
|
||||
|
||||
MockDrmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> drmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver);
|
||||
drmDirectSubmission.completionFenceAllocation = nullptr;
|
||||
EXPECT_TRUE(drmDirectSubmission.allocateResources());
|
||||
auto ringBuffer = static_cast<DrmAllocation *>(drmDirectSubmission.ringBuffers[drmDirectSubmission.currentRingBuffer].ringBuffer);
|
||||
auto initialBO = ringBuffer->getBufferObjectToModify(0);
|
||||
|
||||
auto drm = executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as<Drm>();
|
||||
MockBufferObject mockBO(drm);
|
||||
ringBuffer->getBufferObjectToModify(0) = &mockBO;
|
||||
|
||||
mockBO.execReturnValue = ENXIO;
|
||||
EXPECT_FALSE(drmDirectSubmission.submit(gpuAddress, size));
|
||||
EXPECT_EQ((uint32_t)ENXIO, drmDirectSubmission.getDispatchErrorCode());
|
||||
|
||||
ringBuffer->getBufferObjectToModify(0) = initialBO;
|
||||
}
|
||||
|
||||
HWTEST_F(DrmDirectSubmissionTest, givenTile0AndCompletionFenceSupportWhenSubmittingThenCompletionAddressAndValueArePassedToExec) {
|
||||
uint64_t gpuAddress = 0x1000;
|
||||
size_t size = 0x1000;
|
||||
|
||||
@@ -790,6 +790,10 @@ struct MockDrmDirectSubmissionDispatchCommandBuffer : public DrmDirectSubmission
|
||||
|
||||
ADDMETHOD_NOBASE(dispatchCommandBuffer, bool, false,
|
||||
(BatchBuffer & batchBuffer, FlushStampTracker &flushStamp));
|
||||
|
||||
void setDispatchErrorCode(uint32_t errorCode) {
|
||||
this->dispatchErrorCode = errorCode;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename GfxFamily>
|
||||
@@ -800,6 +804,10 @@ struct MockDrmBlitterDirectSubmissionDispatchCommandBuffer : public DrmDirectSub
|
||||
|
||||
ADDMETHOD_NOBASE(dispatchCommandBuffer, bool, false,
|
||||
(BatchBuffer & batchBuffer, FlushStampTracker &flushStamp));
|
||||
|
||||
void setDispatchErrorCode(uint32_t errorCode) {
|
||||
this->dispatchErrorCode = errorCode;
|
||||
}
|
||||
};
|
||||
|
||||
HWTEST_TEMPLATED_F(DrmCommandStreamDirectSubmissionTest, givenDirectSubmissionFailsThenFlushReturnsError) {
|
||||
@@ -808,6 +816,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamDirectSubmissionTest, givenDirectSubmissionFa
|
||||
testedCsr->directSubmission = std::make_unique<MockDrmDirectSubmissionDispatchCommandBuffer<FamilyType>>(*device->getDefaultEngine().commandStreamReceiver);
|
||||
auto directSubmission = testedCsr->directSubmission.get();
|
||||
static_cast<MockDrmDirectSubmissionDispatchCommandBuffer<FamilyType> *>(directSubmission)->dispatchCommandBufferResult = false;
|
||||
static_cast<MockDrmDirectSubmissionDispatchCommandBuffer<FamilyType> *>(directSubmission)->setDispatchErrorCode(ENXIO);
|
||||
|
||||
auto &cs = csr->getCS();
|
||||
CommandStreamReceiverHw<FamilyType>::addBatchBufferEnd(cs, nullptr);
|
||||
@@ -819,7 +828,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamDirectSubmissionTest, givenDirectSubmissionFa
|
||||
|
||||
auto res = csr->flush(batchBuffer, csr->getResidencyAllocations());
|
||||
EXPECT_GT(static_cast<MockDrmDirectSubmissionDispatchCommandBuffer<FamilyType> *>(directSubmission)->dispatchCommandBufferCalled, 0u);
|
||||
EXPECT_EQ(NEO::SubmissionStatus::FAILED, res);
|
||||
EXPECT_NE(NEO::SubmissionStatus::SUCCESS, res);
|
||||
}
|
||||
|
||||
HWTEST_TEMPLATED_F(DrmCommandStreamBlitterDirectSubmissionTest, givenBlitterDirectSubmissionFailsThenFlushReturnsError) {
|
||||
@@ -828,6 +837,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamBlitterDirectSubmissionTest, givenBlitterDire
|
||||
testedCsr->blitterDirectSubmission = std::make_unique<MockDrmBlitterDirectSubmissionDispatchCommandBuffer<FamilyType>>(*csr);
|
||||
auto blitterDirectSubmission = testedCsr->blitterDirectSubmission.get();
|
||||
static_cast<MockDrmBlitterDirectSubmissionDispatchCommandBuffer<FamilyType> *>(blitterDirectSubmission)->dispatchCommandBufferResult = false;
|
||||
static_cast<MockDrmBlitterDirectSubmissionDispatchCommandBuffer<FamilyType> *>(blitterDirectSubmission)->setDispatchErrorCode(ENXIO);
|
||||
|
||||
auto &cs = csr->getCS();
|
||||
CommandStreamReceiverHw<FamilyType>::addBatchBufferEnd(cs, nullptr);
|
||||
@@ -839,7 +849,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamBlitterDirectSubmissionTest, givenBlitterDire
|
||||
|
||||
auto res = csr->flush(batchBuffer, csr->getResidencyAllocations());
|
||||
EXPECT_GT(static_cast<MockDrmBlitterDirectSubmissionDispatchCommandBuffer<FamilyType> *>(blitterDirectSubmission)->dispatchCommandBufferCalled, 0u);
|
||||
EXPECT_EQ(NEO::SubmissionStatus::FAILED, res);
|
||||
EXPECT_NE(NEO::SubmissionStatus::SUCCESS, res);
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
|
||||
Reference in New Issue
Block a user