diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index 3f1fd93753..d45fcda41f 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -458,7 +458,7 @@ RetainPtr MemoryManager::allocate_kernel_region(size_t size, String&& na return region; } -void MemoryManager::deallocate_user_physical_page(PhysicalPage& page) +void MemoryManager::deallocate_user_physical_page(PhysicalPage&& page) { for (auto& region : m_user_physical_regions) { if (!region->contains(page)) { @@ -468,7 +468,7 @@ void MemoryManager::deallocate_user_physical_page(PhysicalPage& page) continue; } - region->return_page(page); + region->return_page(move(page)); m_user_physical_pages_used--; return; @@ -515,7 +515,7 @@ RetainPtr MemoryManager::allocate_user_physical_page(ShouldZeroFil return page; } -void MemoryManager::deallocate_supervisor_physical_page(PhysicalPage& page) +void MemoryManager::deallocate_supervisor_physical_page(PhysicalPage&& page) { for (auto& region : m_super_physical_regions) { if (!region->contains(page)) { @@ -525,7 +525,7 @@ void MemoryManager::deallocate_supervisor_physical_page(PhysicalPage& page) continue; } - region->return_page(page); + region->return_page(move(page)); m_super_physical_pages_used--; return; diff --git a/Kernel/VM/MemoryManager.h b/Kernel/VM/MemoryManager.h index 29a985adc1..efa291e41c 100644 --- a/Kernel/VM/MemoryManager.h +++ b/Kernel/VM/MemoryManager.h @@ -63,8 +63,8 @@ public: RetainPtr allocate_user_physical_page(ShouldZeroFill); RetainPtr allocate_supervisor_physical_page(); - void deallocate_user_physical_page(PhysicalPage&); - void deallocate_supervisor_physical_page(PhysicalPage&); + void deallocate_user_physical_page(PhysicalPage&&); + void deallocate_supervisor_physical_page(PhysicalPage&&); void remap_region(PageDirectory&, Region&); diff --git a/Kernel/VM/PhysicalPage.cpp b/Kernel/VM/PhysicalPage.cpp index 43d014a0c8..2ddb1d02a5 100644 --- a/Kernel/VM/PhysicalPage.cpp +++ b/Kernel/VM/PhysicalPage.cpp @@ -23,7 +23,7 @@ PhysicalPage::PhysicalPage(PhysicalAddress paddr, bool supervisor, bool may_retu { } -void PhysicalPage::return_to_freelist() +void PhysicalPage::return_to_freelist() && { ASSERT((paddr().get() & ~PAGE_MASK) == 0); @@ -32,9 +32,9 @@ void PhysicalPage::return_to_freelist() m_retain_count = 1; if (m_supervisor) - MM.deallocate_supervisor_physical_page(*this); + MM.deallocate_supervisor_physical_page(move(*this)); else - MM.deallocate_user_physical_page(*this); + MM.deallocate_user_physical_page(move(*this)); #ifdef MM_DEBUG dbgprintf("MM: P%x released to freelist\n", m_paddr.get()); diff --git a/Kernel/VM/PhysicalPage.h b/Kernel/VM/PhysicalPage.h index bf2726bcef..5ac8ad7aac 100644 --- a/Kernel/VM/PhysicalPage.h +++ b/Kernel/VM/PhysicalPage.h @@ -23,7 +23,7 @@ public: ASSERT(m_retain_count); if (!--m_retain_count) { if (m_may_return_to_freelist) - return_to_freelist(); + move(*this).return_to_freelist(); else delete this; } @@ -38,7 +38,7 @@ private: PhysicalPage(PhysicalAddress paddr, bool supervisor, bool may_return_to_freelist = true); ~PhysicalPage() {} - void return_to_freelist(); + void return_to_freelist() &&; word m_retain_count { 1 }; bool m_may_return_to_freelist { true }; diff --git a/Kernel/VM/PhysicalRegion.h b/Kernel/VM/PhysicalRegion.h index d4f4fb1934..b14b6daf1a 100644 --- a/Kernel/VM/PhysicalRegion.h +++ b/Kernel/VM/PhysicalRegion.h @@ -25,7 +25,7 @@ public: RetainPtr take_free_page(bool supervisor); void return_page_at(PhysicalAddress addr); - void return_page(PhysicalPage& page) { return_page_at(page.paddr()); } + void return_page(PhysicalPage&& page) { return_page_at(page.paddr()); } private: PhysicalRegion(PhysicalAddress lower, PhysicalAddress upper);