aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/vm/vm_page.c10
1 files changed, 6 insertions, 4 deletions
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)) {