diff options
author | Andreas Kling <kling@serenityos.org> | 2020-04-28 16:19:50 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-04-28 17:05:14 +0200 |
commit | 9c856811b2ad18b933fc1d9d5b8a771893fa7d9c (patch) | |
tree | 264439a31fc3978ba85bae11d7d2d48bce5de03a /Kernel/VM/Region.h | |
parent | 8a417c311f3c3c13dc5353619051aac777c9f1df (diff) | |
download | serenity-9c856811b2ad18b933fc1d9d5b8a771893fa7d9c.zip |
Kernel: Add Region helpers for accessing underlying physical pages
Since a Region is basically a view into a potentially larger VMObject,
it was always necessary to include the Region starting offset when
accessing its underlying physical pages.
Until now, you had to do that manually, but this patch adds a simple
Region::physical_page() for read-only access and a physical_page_slot()
when you want a mutable reference to the RefPtr<PhysicalPage> itself.
A lot of code is simplified by making use of this.
Diffstat (limited to 'Kernel/VM/Region.h')
-rw-r--r-- | Kernel/VM/Region.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/Kernel/VM/Region.h b/Kernel/VM/Region.h index b71c8986e9..1d95ea8844 100644 --- a/Kernel/VM/Region.h +++ b/Kernel/VM/Region.h @@ -128,6 +128,18 @@ public: return size() / PAGE_SIZE; } + const PhysicalPage* physical_page(size_t index) const + { + ASSERT(index < page_count()); + return vmobject().physical_pages()[first_page_index() + index]; + } + + RefPtr<PhysicalPage>& physical_page_slot(size_t index) + { + ASSERT(index < page_count()); + return vmobject().physical_pages()[first_page_index() + index]; + } + size_t offset_in_vmobject() const { return m_offset_in_vmobject; |