From 9cd47ffeafca41d792d279cfb5107c8ec618ddfd Mon Sep 17 00:00:00 2001 From: Zbigniew Zdanowicz Date: Tue, 4 Oct 2022 11:19:00 +0000 Subject: [PATCH] Add ownership management when ensuring space for shared heaps Related-To: NEO-7142 Signed-off-by: Zbigniew Zdanowicz --- shared/source/command_container/cmdcontainer.cpp | 1 + .../command_container/command_container_tests.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/shared/source/command_container/cmdcontainer.cpp b/shared/source/command_container/cmdcontainer.cpp index 85a9b05280..9ea5289bae 100644 --- a/shared/source/command_container/cmdcontainer.cpp +++ b/shared/source/command_container/cmdcontainer.cpp @@ -353,6 +353,7 @@ IndirectHeap *CommandContainer::getIndirectHeap(HeapType heapType) { } void CommandContainer::ensureHeapSizePrepared(size_t sshRequiredSize, size_t dshRequiredSize) { + auto lock = immediateCmdListCsr->obtainUniqueOwnership(); sharedSshCsrHeap = &immediateCmdListCsr->getIndirectHeap(HeapType::SURFACE_STATE, sshRequiredSize); if (dshRequiredSize > 0) { diff --git a/shared/test/unit_test/command_container/command_container_tests.cpp b/shared/test/unit_test/command_container/command_container_tests.cpp index 689dfb6f76..287ba1a10a 100644 --- a/shared/test/unit_test/command_container/command_container_tests.cpp +++ b/shared/test/unit_test/command_container/command_container_tests.cpp @@ -10,6 +10,7 @@ #include "shared/source/memory_manager/allocations_list.h" #include "shared/test/common/fixtures/device_fixture.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" +#include "shared/test/common/libult/ult_command_stream_receiver.h" #include "shared/test/common/mocks/mock_graphics_allocation.h" #include "shared/test/common/mocks/mock_memory_manager.h" #include "shared/test/common/test_macros/hw_test.h" @@ -834,7 +835,7 @@ TEST_F(CommandContainerTest, GivenCmdContainerWhenContainerIsInitializedThenSurf EXPECT_EQ(expectedHeapSize, size); } -TEST_F(CommandContainerTest, givenCmdContainerHasImmediateCsrWhenGettingHeapWithoutEnsuringSpaceThenExpectNullptrReturnedOrUnrecoverable) { +HWTEST_F(CommandContainerTest, givenCmdContainerHasImmediateCsrWhenGettingHeapWithoutEnsuringSpaceThenExpectNullptrReturnedOrUnrecoverable) { CommandContainer cmdContainer; cmdContainer.setImmediateCmdListCsr(pDevice->getDefaultEngine().commandStreamReceiver); cmdContainer.setNumIddPerBlock(1); @@ -850,7 +851,11 @@ TEST_F(CommandContainerTest, givenCmdContainerHasImmediateCsrWhenGettingHeapWith EXPECT_THROW(cmdContainer.getHeapSpaceAllowGrow(HeapType::SURFACE_STATE, 0), std::exception); EXPECT_THROW(cmdContainer.getHeapWithRequiredSizeAndAlignment(HeapType::SURFACE_STATE, 0, 0), std::exception); + auto &ultCsr = pDevice->getUltCommandStreamReceiver(); + ultCsr.recursiveLockCounter = 0; + cmdContainer.ensureHeapSizePrepared(0, 0); + EXPECT_EQ(1u, ultCsr.recursiveLockCounter); EXPECT_EQ(nullptr, cmdContainer.getIndirectHeap(HeapType::DYNAMIC_STATE)); EXPECT_NE(nullptr, cmdContainer.getIndirectHeap(HeapType::SURFACE_STATE)); @@ -862,6 +867,7 @@ TEST_F(CommandContainerTest, givenCmdContainerHasImmediateCsrWhenGettingHeapWith EXPECT_NO_THROW(cmdContainer.getHeapWithRequiredSizeAndAlignment(HeapType::SURFACE_STATE, 0, 0)); cmdContainer.ensureHeapSizePrepared(4 * MemoryConstants::kiloByte, 4 * MemoryConstants::kiloByte); + EXPECT_EQ(2u, ultCsr.recursiveLockCounter); auto dshHeap = cmdContainer.getIndirectHeap(HeapType::DYNAMIC_STATE); EXPECT_NE(nullptr, dshHeap);