From 7497caf0fc2ca740229205bc857ce5fb2ff698be Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Tue, 25 Mar 2025 10:23:12 -0400 Subject: kernel: vm: Fix vm_page insertions Ensure vm_page entries are properly kept track of. This commit additionally simplifies and cleans up vm_pageinsert() Signed-off-by: Ian Moffett --- sys/vm/vm_page.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'sys/vm') diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 52ded0e..3403a49 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -43,11 +43,12 @@ RBT_GENERATE(vm_objtree, vm_page, objt, vm_pagecmp); static inline void vm_pageinsert(struct vm_page *pg, struct vm_object *obp) { - struct vm_page *tmp; + struct vm_page *tmp; - tmp = RBT_INSERT(vm_objtree, &obp->objt, pg); - __assert(tmp == NULL); - ++obp->npages; + tmp = RBT_INSERT(vm_objtree, &obp->objt, pg); + if (tmp != NULL) + return; + ++obp->npages; } static inline void @@ -79,6 +80,7 @@ vm_pagealloc(struct vm_object *obj, int flags) memset(tmp, 0, sizeof(*tmp)); tmp->phys_addr = vm_alloc_frame(1); tmp->flags |= (PG_VALID | PG_CLEAN); + tmp->offset = tmp->phys_addr >> 12; __assert(tmp->phys_addr != 0); if (ISSET(flags, PALLOC_ZERO)) { -- cgit v1.2.3