diff --git a/runtime/command_queue/cpu_data_transfer_handler.cpp b/runtime/command_queue/cpu_data_transfer_handler.cpp index c4ac0e65be..a663f42926 100644 --- a/runtime/command_queue/cpu_data_transfer_handler.cpp +++ b/runtime/command_queue/cpu_data_transfer_handler.cpp @@ -144,7 +144,7 @@ void *CommandQueue::cpuDataTransferHandler(TransferProperties &transferPropertie if (outEventObj) { outEventObj->setEndTimeStamp(); outEventObj->updateTaskCount(this->taskCount); - outEventObj->flushStamp->setStamp(this->flushStamp->peekStamp()); + outEventObj->flushStamp->replaceStampObject(this->flushStamp->getStampReference()); if (eventCompleted) { outEventObj->setStatus(CL_COMPLETE); } else { diff --git a/unit_tests/command_queue/enqueue_kernel_1_tests.cpp b/unit_tests/command_queue/enqueue_kernel_1_tests.cpp index 5922ddd500..af859a2a1e 100644 --- a/unit_tests/command_queue/enqueue_kernel_1_tests.cpp +++ b/unit_tests/command_queue/enqueue_kernel_1_tests.cpp @@ -636,6 +636,24 @@ HWTEST_F(EnqueueKernelTest, givenCsrInBatchingModeWhenCommandIsFlushedThenFlushS status = clReleaseEvent(event); } +HWTEST_F(EnqueueKernelTest, givenCsrInBatchingModeWhenNonBlockingMapFollowsNdrCallThenFlushStampIsUpdatedProperly) { + auto mockCsr = new MockCsrHw2(*pDevice->executionEnvironment); + mockCsr->overrideDispatchPolicy(DispatchMode::BatchedDispatch); + pDevice->resetCommandStreamReceiver(mockCsr); + + EXPECT_TRUE(this->destBuffer->isMemObjZeroCopy()); + MockKernelWithInternals mockKernel(*pDevice); + size_t gws[3] = {1, 0, 0}; + pCmdQ->enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); + cl_event event; + pCmdQ->enqueueMapBuffer(this->destBuffer, false, CL_MAP_READ, 0u, 1u, 0, nullptr, &event, this->retVal); + + pCmdQ->flush(); + auto neoEvent = castToObject(event); + EXPECT_EQ(1u, neoEvent->flushStamp->peekStamp()); + clReleaseEvent(event); +} + HWTEST_F(EnqueueKernelTest, givenCsrInBatchingModeWhenCommandWithEventIsFollowedByCommandWithoutEventThenFlushStampIsUpdatedInCommandQueueCsrAndEvent) { auto mockCsr = new MockCsrHw2(*pDevice->executionEnvironment); mockCsr->overrideDispatchPolicy(DispatchMode::BatchedDispatch);