mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
a324d4d6a3
AnonymousVMObject::create_with_physical_page(s) can't be NonnullRefPtr as it allocates internally. Fixing the API then surfaced an issue in ScatterGatherList, where the code was attempting to create an AnonymousVMObject in the constructor which will not be observable during OOM. Fix all of these issues and start propagating errors at the callers of the AnonymousVMObject and ScatterGatherList APis.
32 lines
1,013 B
C++
32 lines
1,013 B
C++
/*
|
|
* Copyright (c) 2021, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Vector.h>
|
|
#include <Kernel/Devices/BlockDevice.h>
|
|
#include <Kernel/PhysicalAddress.h>
|
|
#include <Kernel/VM/AnonymousVMObject.h>
|
|
#include <Kernel/VM/MemoryManager.h>
|
|
|
|
namespace Kernel {
|
|
|
|
/// A Scatter-Gather List type that owns its buffers
|
|
|
|
class ScatterGatherList : public RefCounted<ScatterGatherList> {
|
|
public:
|
|
static RefPtr<ScatterGatherList> create(AsyncBlockDeviceRequest&, NonnullRefPtrVector<PhysicalPage> allocated_pages, size_t device_block_size);
|
|
const VMObject& vmobject() const { return m_vm_object; }
|
|
VirtualAddress dma_region() const { return m_dma_region->vaddr(); }
|
|
size_t scatters_count() const { return m_vm_object->physical_pages().size(); }
|
|
|
|
private:
|
|
ScatterGatherList(NonnullRefPtr<AnonymousVMObject>, AsyncBlockDeviceRequest&, size_t device_block_size);
|
|
NonnullRefPtr<AnonymousVMObject> m_vm_object;
|
|
OwnPtr<Region> m_dma_region;
|
|
};
|
|
|
|
}
|