diff --git a/shared/source/memory_manager/memory_manager.cpp b/shared/source/memory_manager/memory_manager.cpp index 0f2f4252ab..f8c43d4981 100644 --- a/shared/source/memory_manager/memory_manager.cpp +++ b/shared/source/memory_manager/memory_manager.cpp @@ -876,7 +876,7 @@ GraphicsAllocation *MemoryManager::allocateGraphicsMemory(const AllocationData & if (allocationData.gpuAddress) { return allocateGraphicsMemoryWithGpuVa(allocationData); } - if (peek64kbPagesEnabled(allocationData.rootDeviceIndex) && allocationData.flags.allow64kbPages) { + if (peek64kbPagesEnabled(allocationData.rootDeviceIndex) && allocationData.flags.allow64kbPages && MemoryConstants::pageSize64k >= allocationData.alignment) { return allocateGraphicsMemory64kb(allocationData); } return allocateGraphicsMemoryWithAlignment(allocationData); diff --git a/shared/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.cpp b/shared/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.cpp index 5e1801bccd..c411b4eaf6 100644 --- a/shared/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.cpp +++ b/shared/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.cpp @@ -385,6 +385,37 @@ TEST(MemoryManagerTest, givenEnabled64kbPagesWhenGraphicsMemoryWithoutAllow64kbP memoryManager.freeGraphicsMemory(allocation); } +TEST(MemoryManagerTest, givenEnabled64kbPagesWhenGraphicsMemoryWithAllow64kbPagesFlagsIsAllocatedThen64kbAllocationIsReturned) { + MockExecutionEnvironment executionEnvironment(defaultHwInfo.get()); + MockMemoryManager memoryManager(true, false, executionEnvironment); + AllocationData allocData; + AllocationProperties properties(mockRootDeviceIndex, 10, AllocationType::buffer, mockDeviceBitfield); + + memoryManager.getAllocationData(allocData, properties, nullptr, memoryManager.createStorageInfoFromProperties(properties)); + allocData.flags.allow64kbPages = true; + + auto allocation = memoryManager.allocateGraphicsMemory(allocData); + EXPECT_TRUE(memoryManager.allocation64kbPageCreated); + + memoryManager.freeGraphicsMemory(allocation); +} + +TEST(MemoryManagerTest, givenEnabled64kbPagesWhenAlignmentIsBiggerThan64kbThenNon64kbAllocationIsReturned) { + MockExecutionEnvironment executionEnvironment(defaultHwInfo.get()); + MockMemoryManager memoryManager(true, false, executionEnvironment); + AllocationData allocData; + AllocationProperties properties(mockRootDeviceIndex, 10, AllocationType::buffer, mockDeviceBitfield); + + memoryManager.getAllocationData(allocData, properties, nullptr, memoryManager.createStorageInfoFromProperties(properties)); + allocData.flags.allow64kbPages = true; + allocData.alignment = 2 * MemoryConstants::pageSize64k; + + auto allocation = memoryManager.allocateGraphicsMemory(allocData); + EXPECT_FALSE(memoryManager.allocation64kbPageCreated); + + memoryManager.freeGraphicsMemory(allocation); +} + TEST(MemoryManagerTest, givenDisabled64kbPagesWhenGraphicsMemoryMustBeHostMemoryAndIsAllocatedWithNullptrForBufferThenNon64kbAllocationIsReturned) { MockExecutionEnvironment executionEnvironment(defaultHwInfo.get()); MockMemoryManager memoryManager(false, false, executionEnvironment);