Skip to content

Commit a2ed01b

Browse files
Use waitForTaskCountWithKmdNotifyFallback in blitFromHostPtr method
Change-Id: Ib70df07e2a7cef514037c9327575ef8e867e6ca6 Related-To: NEO-3020 Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
1 parent 582fc9c commit a2ed01b

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

runtime/command_stream/command_stream_receiver_hw.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,9 +820,10 @@ void CommandStreamReceiverHw<GfxFamily>::blitFromHostPtr(MemObj &destinationMemO
820820

821821
latestFlushedTaskCount = newTaskCount;
822822
taskCount = newTaskCount;
823+
auto flushStampToWait = flushStamp->peekStamp();
823824

824825
lock.unlock();
825-
waitForCompletionWithTimeout(false, 0, newTaskCount);
826+
waitForTaskCountWithKmdNotifyFallback(newTaskCount, flushStampToWait, false, false);
826827
}
827828

828829
} // namespace NEO

unit_tests/command_stream/command_stream_receiver_hw_tests.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,3 +411,42 @@ HWTEST_F(BcsTests, givenBufferWhenBlitCalledThenFlushCommandBuffer) {
411411

412412
EXPECT_EQ(newTaskCount, csr.latestWaitForCompletionWithTimeoutTaskCount.load());
413413
}
414+
415+
HWTEST_F(BcsTests, whenBlitFromHostPtrCalledThenCallWaitWithKmdFallback) {
416+
class MyMockCsr : public UltCommandStreamReceiver<FamilyType> {
417+
public:
418+
using UltCommandStreamReceiver<FamilyType>::UltCommandStreamReceiver;
419+
420+
void waitForTaskCountWithKmdNotifyFallback(uint32_t taskCountToWait, FlushStamp flushStampToWait,
421+
bool useQuickKmdSleep, bool forcePowerSavingMode) override {
422+
waitForTaskCountWithKmdNotifyFallbackCalled++;
423+
taskCountToWaitPassed = taskCountToWait;
424+
flushStampToWaitPassed = flushStampToWait;
425+
useQuickKmdSleepPassed = useQuickKmdSleep;
426+
forcePowerSavingModePassed = forcePowerSavingMode;
427+
}
428+
429+
uint32_t taskCountToWaitPassed = 0;
430+
FlushStamp flushStampToWaitPassed = 0;
431+
bool useQuickKmdSleepPassed = false;
432+
bool forcePowerSavingModePassed = false;
433+
uint32_t waitForTaskCountWithKmdNotifyFallbackCalled = 0;
434+
};
435+
436+
auto myMockCsr = std::make_unique<::testing::NiceMock<MyMockCsr>>(*pDevice->getExecutionEnvironment());
437+
auto &bcsOsContext = pDevice->getUltCommandStreamReceiver<FamilyType>().getOsContext();
438+
myMockCsr->initializeTagAllocation();
439+
myMockCsr->setupContext(bcsOsContext);
440+
441+
cl_int retVal = CL_SUCCESS;
442+
auto buffer = clUniquePtr<Buffer>(Buffer::create(context.get(), CL_MEM_READ_WRITE, 1, nullptr, retVal));
443+
void *hostPtr = reinterpret_cast<void *>(0x12340000);
444+
445+
myMockCsr->blitFromHostPtr(*buffer, hostPtr, 1);
446+
447+
EXPECT_EQ(1u, myMockCsr->waitForTaskCountWithKmdNotifyFallbackCalled);
448+
EXPECT_EQ(myMockCsr->taskCount, myMockCsr->taskCountToWaitPassed);
449+
EXPECT_EQ(myMockCsr->flushStamp->peekStamp(), myMockCsr->flushStampToWaitPassed);
450+
EXPECT_FALSE(myMockCsr->useQuickKmdSleepPassed);
451+
EXPECT_FALSE(myMockCsr->forcePowerSavingModePassed);
452+
}

0 commit comments

Comments
 (0)