diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp index 2a5afa3688..c16984e955 100644 --- a/Kernel/Memory/MemoryManager.cpp +++ b/Kernel/Memory/MemoryManager.cpp @@ -1118,4 +1118,12 @@ void CommittedPhysicalPageSet::uncommit_one() MM.uncommit_user_physical_pages({}, 1); } +void MemoryManager::copy_physical_page(PhysicalPage& physical_page, u8 page_buffer[PAGE_SIZE]) +{ + SpinlockLocker locker(s_mm_lock); + auto* quickmapped_page = quickmap_page(physical_page); + memcpy(page_buffer, quickmapped_page, PAGE_SIZE); + unquickmap_page(); +} + } diff --git a/Kernel/Memory/MemoryManager.h b/Kernel/Memory/MemoryManager.h index e1229d1bb5..edd6dd1640 100644 --- a/Kernel/Memory/MemoryManager.h +++ b/Kernel/Memory/MemoryManager.h @@ -240,6 +240,8 @@ public: PhysicalPageEntry& get_physical_page_entry(PhysicalAddress); PhysicalAddress get_physical_address(PhysicalPage const&); + void copy_physical_page(PhysicalPage&, u8 page_buffer[PAGE_SIZE]); + private: MemoryManager(); ~MemoryManager();