diff --git a/headers/private/kernel/vm/vm_types.h b/headers/private/kernel/vm/vm_types.h index 5013b70123..40f556de4b 100644 --- a/headers/private/kernel/vm/vm_types.h +++ b/headers/private/kernel/vm/vm_types.h @@ -113,9 +113,9 @@ struct VMCacheRef { struct vm_page { - DoublyLinkedListLink queue_link; + const page_num_t physical_page_number; - page_num_t physical_page_number; + DoublyLinkedListLink queue_link; private: VMCacheRef* cache_ref; @@ -153,7 +153,7 @@ public: uint8 usage_count; - inline void Init(page_num_t pageNumber); + inline vm_page(page_num_t pageNumber); VMCacheRef* CacheRef() const { return cache_ref; } void SetCacheRef(VMCacheRef* cacheRef) { this->cache_ref = cacheRef; } @@ -199,10 +199,11 @@ enum { #define VM_PAGE_ALLOC_BUSY 0x00000020 -inline void -vm_page::Init(page_num_t pageNumber) +inline +vm_page::vm_page(page_num_t pageNumber) + : + physical_page_number(pageNumber) { - physical_page_number = pageNumber; new(&mappings) vm_page_mappings(); SetCacheRef(NULL); diff --git a/src/system/kernel/vm/vm_page.cpp b/src/system/kernel/vm/vm_page.cpp index 159cedc42c..b4e3dfe63a 100644 --- a/src/system/kernel/vm/vm_page.cpp +++ b/src/system/kernel/vm/vm_page.cpp @@ -1876,7 +1876,7 @@ free_cached_page(vm_page *page, bool dontWait) static uint32 free_cached_pages(uint32 pagesToFree, bool dontWait) { - vm_page marker; + vm_page marker(-1); init_page_marker(marker); forbid_page_faults(); @@ -2007,7 +2007,7 @@ full_scan_inactive_pages(page_stats& pageStats, int32 despairLevel) // scale only when things get desperate. uint32 maxToFlush = despairLevel <= 1 ? 32 : 10000; - vm_page marker; + vm_page marker(-1); init_page_marker(marker); VMPageQueue& queue = sInactivePageQueue; @@ -2124,7 +2124,7 @@ full_scan_inactive_pages(page_stats& pageStats, int32 despairLevel) static void full_scan_active_pages(page_stats& pageStats, int32 despairLevel) { - vm_page marker; + vm_page marker(-1); init_page_marker(marker); VMPageQueue& queue = sActivePageQueue; @@ -2453,7 +2453,7 @@ vm_page_init(kernel_args *args) // initialize the free page table for (uint32 i = 0; i < sNumPages; i++) { - sPages[i].Init(sPhysicalPageOffset + i); + new(&sPages[i]) vm_page(sPhysicalPageOffset + i); sFreePageQueue.Append(&sPages[i]); #if VM_PAGE_ALLOCATION_TRACKING_AVAILABLE