diff --git a/Kernel/Memory/ScatterGatherList.cpp b/Kernel/Memory/ScatterGatherList.cpp index f49237c2d9b..d4ff52d6920 100644 --- a/Kernel/Memory/ScatterGatherList.cpp +++ b/Kernel/Memory/ScatterGatherList.cpp @@ -11,16 +11,16 @@ namespace Kernel::Memory { ErrorOr> ScatterGatherList::try_create(AsyncBlockDeviceRequest& request, Span> allocated_pages, size_t device_block_size) { auto vm_object = TRY(AnonymousVMObject::try_create_with_physical_pages(allocated_pages)); - return adopt_lock_ref_if_nonnull(new (nothrow) ScatterGatherList(vm_object, request, device_block_size)); + auto size = TRY(page_round_up((request.block_count() * device_block_size))); + auto region = TRY(MM.allocate_kernel_region_with_vmobject(vm_object, size, "AHCI Scattered DMA"sv, Region::Access::Read | Region::Access::Write, Region::Cacheable::Yes)); + + return adopt_lock_ref_if_nonnull(new (nothrow) ScatterGatherList(vm_object, move(region))); } -ScatterGatherList::ScatterGatherList(NonnullLockRefPtr vm_object, AsyncBlockDeviceRequest& request, size_t device_block_size) +ScatterGatherList::ScatterGatherList(NonnullLockRefPtr vm_object, NonnullOwnPtr dma_region) : m_vm_object(move(vm_object)) + , m_dma_region(move(dma_region)) { - auto region_or_error = MM.allocate_kernel_region_with_vmobject(m_vm_object, page_round_up((request.block_count() * device_block_size)).release_value_but_fixme_should_propagate_errors(), "AHCI Scattered DMA"sv, Region::Access::Read | Region::Access::Write, Region::Cacheable::Yes); - if (region_or_error.is_error()) - TODO(); - m_dma_region = region_or_error.release_value(); } } diff --git a/Kernel/Memory/ScatterGatherList.h b/Kernel/Memory/ScatterGatherList.h index d6920f025b4..fb8fe49b7cd 100644 --- a/Kernel/Memory/ScatterGatherList.h +++ b/Kernel/Memory/ScatterGatherList.h @@ -25,9 +25,9 @@ public: size_t scatters_count() const { return m_vm_object->physical_pages().size(); } private: - ScatterGatherList(NonnullLockRefPtr, AsyncBlockDeviceRequest&, size_t device_block_size); + ScatterGatherList(NonnullLockRefPtr, NonnullOwnPtr dma_region); NonnullLockRefPtr m_vm_object; - OwnPtr m_dma_region; + NonnullOwnPtr m_dma_region; }; }