fix: zero kernel residency container for shared system usm pointers

Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
Zbigniew Zdanowicz 2025-02-05 17:53:17 +00:00 committed by Compute-Runtime-Automation
parent f96fc552b2
commit 9419e702cc
2 changed files with 6 additions and 0 deletions

View File

@ -776,6 +776,7 @@ ze_result_t KernelImp::setArgBuffer(uint32_t argIndex, size_t argSize, const voi
if (allocData == nullptr) {
if (NEO::debugManager.flags.DisableSystemPointerKernelArgument.get() != 1) {
argumentsResidencyContainer[argIndex] = nullptr;
const auto &argAsPtr = kernelImmData->getDescriptor().payloadMappings.explicitArgs[argIndex].as<NEO::ArgDescPointer>();
auto patchLocation = ptrOffset(getCrossThreadData(), argAsPtr.stateless);
patchWithRequiredSize(const_cast<uint8_t *>(patchLocation), argAsPtr.pointerSize, reinterpret_cast<uintptr_t>(requestedAddress));

View File

@ -333,11 +333,13 @@ TEST_F(SetKernelArgCacheTest, givenValidBufferArgumentWhenSetMultipleTimesThenSe
EXPECT_EQ(mockKernel.kernelArgInfos[0].allocIdMemoryManagerCounter, svmAllocsManager->allocationsCounter);
EXPECT_EQ(mockKernel.kernelArgInfos[0].allocId, allocData->getAllocId());
const auto &argumentsResidencyContainer = mockKernel.getArgumentsResidencyContainer();
// different value - called
auto secondSvmAllocation = svmAllocsManager->createSVMAlloc(4096, allocationProperties, context->rootDeviceIndices, context->deviceBitfields);
svmAllocsManager->getSVMAlloc(secondSvmAllocation)->setAllocId(3u);
EXPECT_EQ(ZE_RESULT_SUCCESS, mockKernel.setArgBuffer(0, sizeof(secondSvmAllocation), &secondSvmAllocation));
EXPECT_EQ(++callCounter, mockKernel.setArgBufferWithAllocCalled);
EXPECT_NE(nullptr, argumentsResidencyContainer[0]);
// nullptr - not called, argInfo is updated
EXPECT_FALSE(mockKernel.kernelArgInfos[0].isSetToNullptr);
@ -345,6 +347,7 @@ TEST_F(SetKernelArgCacheTest, givenValidBufferArgumentWhenSetMultipleTimesThenSe
EXPECT_EQ(ZE_RESULT_SUCCESS, mockKernel.setArgBuffer(0, sizeof(nullptr), nullptr));
EXPECT_EQ(callCounter, mockKernel.setArgBufferWithAllocCalled);
EXPECT_TRUE(mockKernel.kernelArgInfos[0].isSetToNullptr);
EXPECT_EQ(nullptr, argumentsResidencyContainer[0]);
// nullptr again - not called
EXPECT_EQ(ZE_RESULT_SUCCESS, mockKernel.setArgBuffer(0, sizeof(nullptr), nullptr));
@ -355,6 +358,7 @@ TEST_F(SetKernelArgCacheTest, givenValidBufferArgumentWhenSetMultipleTimesThenSe
EXPECT_EQ(ZE_RESULT_SUCCESS, mockKernel.setArgBuffer(0, sizeof(secondSvmAllocation), &secondSvmAllocation));
EXPECT_EQ(++callCounter, mockKernel.setArgBufferWithAllocCalled);
EXPECT_FALSE(mockKernel.kernelArgInfos[0].isSetToNullptr);
EXPECT_NE(nullptr, argumentsResidencyContainer[0]);
// allocations counter == 0 called
svmAllocsManager->allocationsCounter = 0;
@ -374,6 +378,7 @@ TEST_F(SetKernelArgCacheTest, givenValidBufferArgumentWhenSetMultipleTimesThenSe
ASSERT_EQ(mockKernel.kernelArgInfos[0].value, secondSvmAllocation);
ASSERT_EQ(mockKernel.kernelArgInfos[0].allocId, 0u);
EXPECT_EQ(callCounter, mockKernel.setArgBufferWithAllocCalled);
EXPECT_EQ(nullptr, argumentsResidencyContainer[0]);
svmAllocsManager->freeSVMAlloc(svmAllocation);
}