From 73456d66b3a9e5ce8ed7efcd6656a35431e4dddb Mon Sep 17 00:00:00 2001 From: "Mrozek, Michal" Date: Tue, 26 Feb 2019 15:11:30 +0100 Subject: [PATCH] Add proper type for host ptr allocations. Change-Id: I324b54b415626043cc801ceb7f73547b96018fe0 --- runtime/memory_manager/graphics_allocation.h | 1 + runtime/memory_manager/memory_manager.cpp | 2 ++ runtime/memory_manager/memory_manager.h | 2 +- ...mory_manager_allocate_in_preferred_pool_tests.inl | 12 ++++++++++++ unit_tests/memory_manager/memory_manager_tests.cpp | 1 + 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/runtime/memory_manager/graphics_allocation.h b/runtime/memory_manager/graphics_allocation.h index e077ef12bb..9ad77f9b9d 100644 --- a/runtime/memory_manager/graphics_allocation.h +++ b/runtime/memory_manager/graphics_allocation.h @@ -83,6 +83,7 @@ class GraphicsAllocation : public IDNode { SVM, KERNEL_ISA, INTERNAL_HEAP, + EXTERNAL_HOST_PTR, UNDECIDED, }; diff --git a/runtime/memory_manager/memory_manager.cpp b/runtime/memory_manager/memory_manager.cpp index 6607d0fa49..e54ebe2b2f 100644 --- a/runtime/memory_manager/memory_manager.cpp +++ b/runtime/memory_manager/memory_manager.cpp @@ -242,6 +242,7 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo case GraphicsAllocation::AllocationType::CONSTANT_SURFACE: case GraphicsAllocation::AllocationType::GLOBAL_SURFACE: case GraphicsAllocation::AllocationType::SVM: + case GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR: mustBeZeroCopy = true; break; default: @@ -252,6 +253,7 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo case GraphicsAllocation::AllocationType::UNDECIDED: case GraphicsAllocation::AllocationType::FILL_PATTERN: case GraphicsAllocation::AllocationType::PROFILING_TAG_BUFFER: + case GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR: allocationData.flags.useSystemMemory = true; break; default: diff --git a/runtime/memory_manager/memory_manager.h b/runtime/memory_manager/memory_manager.h index b5bac28369..d96a3c2b74 100644 --- a/runtime/memory_manager/memory_manager.h +++ b/runtime/memory_manager/memory_manager.h @@ -107,7 +107,7 @@ class MemoryManager { GraphicsAllocation *allocateGraphicsMemoryForHostPtr(size_t size, void *ptr, bool fullRangeSvm, bool requiresL3Flush) { if (fullRangeSvm && DebugManager.flags.EnableHostPtrTracking.get()) { - return allocateGraphicsMemory({false, size, GraphicsAllocation::AllocationType::UNDECIDED}, ptr); + return allocateGraphicsMemory({false, size, GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR}, ptr); } else { auto allocation = allocateGraphicsMemoryForNonSvmHostPtr(size, ptr); if (allocation) { diff --git a/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl b/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl index 080a607734..d0ba7572e4 100644 --- a/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl +++ b/unit_tests/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl @@ -443,3 +443,15 @@ TEST(MemoryManagerTest, givenLinearStreamWhenGetAllocationDataIsCalledThenSystem TEST(MemoryManagerTest, givenKernelIsaTypeThenUseInternal32BitAllocator) { EXPECT_TRUE(MockMemoryManager::useInternal32BitAllocator(GraphicsAllocation::AllocationType::KERNEL_ISA)); } + +TEST(MemoryManagerTest, givenExternalHostMemoryWhenGetAllocationDataIsCalledThenItHasProperFieldsSet) { + AllocationData allocData; + auto hostPtr = reinterpret_cast(0x1234); + MockMemoryManager::getAllocationData(allocData, {false, 1, GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR}, {}, hostPtr); + EXPECT_TRUE(allocData.flags.useSystemMemory); + EXPECT_TRUE(allocData.flags.mustBeZeroCopy); + EXPECT_FALSE(allocData.flags.allocateMemory); + EXPECT_FALSE(allocData.flags.allow32Bit); + EXPECT_FALSE(allocData.flags.allow64kbPages); + EXPECT_EQ(allocData.hostPtr, hostPtr); +} diff --git a/unit_tests/memory_manager/memory_manager_tests.cpp b/unit_tests/memory_manager/memory_manager_tests.cpp index 47e9ce8220..279755dbaa 100644 --- a/unit_tests/memory_manager/memory_manager_tests.cpp +++ b/unit_tests/memory_manager/memory_manager_tests.cpp @@ -1070,6 +1070,7 @@ TEST_P(OsAgnosticMemoryManagerWithParams, givenFullGpuAddressSpaceWhenAllocateGr EXPECT_NE(nullptr, allocation); EXPECT_EQ(1u, allocation->fragmentsStorage.fragmentCount); EXPECT_FALSE(allocation->flushL3Required); + EXPECT_EQ(GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR, allocation->getAllocationType()); memoryManager.freeGraphicsMemory(allocation); }