From 59da9bd0bdf249108cb9628cb417a117c14f7e71 Mon Sep 17 00:00:00 2001 From: Pankaj Raghav Date: Sat, 8 Jan 2022 22:04:09 +0530 Subject: [PATCH] Kernel: Overload DMA helper without Physical Page output parameter Not all drivers need the PhysicalPage output parameter while creating a DMA buffer. This overload will avoid creating a temporary variable for the caller --- Kernel/Memory/MemoryManager.cpp | 15 +++++++++++++++ Kernel/Memory/MemoryManager.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp index b044b991b5..4719f1fc6e 100644 --- a/Kernel/Memory/MemoryManager.cpp +++ b/Kernel/Memory/MemoryManager.cpp @@ -753,6 +753,13 @@ ErrorOr> MemoryManager::allocate_dma_buffer_page(S return region_or_error; } +ErrorOr> MemoryManager::allocate_dma_buffer_page(StringView name, Memory::Region::Access access) +{ + RefPtr dma_buffer_page; + + return allocate_dma_buffer_page(name, access, dma_buffer_page); +} + ErrorOr> MemoryManager::allocate_dma_buffer_pages(size_t size, StringView name, Memory::Region::Access access, NonnullRefPtrVector& dma_buffer_pages) { VERIFY(!(size % PAGE_SIZE)); @@ -764,6 +771,14 @@ ErrorOr> MemoryManager::allocate_dma_buffer_pages( return region_or_error; } +ErrorOr> MemoryManager::allocate_dma_buffer_pages(size_t size, StringView name, Memory::Region::Access access) +{ + VERIFY(!(size % PAGE_SIZE)); + NonnullRefPtrVector dma_buffer_pages; + + return allocate_dma_buffer_pages(size, name, access, dma_buffer_pages); +} + ErrorOr> MemoryManager::allocate_kernel_region(size_t size, StringView name, Region::Access access, AllocationStrategy strategy, Region::Cacheable cacheable) { VERIFY(!(size % PAGE_SIZE)); diff --git a/Kernel/Memory/MemoryManager.h b/Kernel/Memory/MemoryManager.h index fb0892d833..8c53855de9 100644 --- a/Kernel/Memory/MemoryManager.h +++ b/Kernel/Memory/MemoryManager.h @@ -176,7 +176,9 @@ public: ErrorOr> allocate_contiguous_kernel_region(size_t, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); ErrorOr> allocate_dma_buffer_page(StringView name, Memory::Region::Access access, RefPtr& dma_buffer_page); + ErrorOr> allocate_dma_buffer_page(StringView name, Memory::Region::Access access); ErrorOr> allocate_dma_buffer_pages(size_t size, StringView name, Memory::Region::Access access, NonnullRefPtrVector& dma_buffer_pages); + ErrorOr> allocate_dma_buffer_pages(size_t size, StringView name, Memory::Region::Access access); ErrorOr> allocate_kernel_region(size_t, StringView name, Region::Access access, AllocationStrategy strategy = AllocationStrategy::Reserve, Region::Cacheable = Region::Cacheable::Yes); ErrorOr> allocate_kernel_region(PhysicalAddress, size_t, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); ErrorOr> allocate_kernel_region_with_vmobject(VMObject&, size_t, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes);