Here's a simple diff to add some more sanity checks in uvm_pagelookup().

Nothing fancy, it helps documenting the flags and reduce the difference
with NetBSD.  This is part of my on-going work on UVM.

ok?

Index: uvm/uvm_page.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_page.c,v
retrieving revision 1.172
diff -u -p -r1.172 uvm_page.c
--- uvm/uvm_page.c      13 May 2023 09:24:59 -0000      1.172
+++ uvm/uvm_page.c      11 Aug 2023 17:55:43 -0000
@@ -1219,10 +1219,16 @@ struct vm_page *
 uvm_pagelookup(struct uvm_object *obj, voff_t off)
 {
        /* XXX if stack is too much, handroll */
-       struct vm_page pg;
+       struct vm_page p, *pg;
+
+       p.offset = off;
+       pg = RBT_FIND(uvm_objtree, &obj->memt, &p);
+
+       KASSERT(pg == NULL || obj->uo_npages != 0);
+       KASSERT(pg == NULL || (pg->pg_flags & PG_RELEASED) == 0 ||
+           (pg->pg_flags & PG_BUSY) != 0);
+       return (pg);
 
-       pg.offset = off;
-       return RBT_FIND(uvm_objtree, &obj->memt, &pg);
 }
 
 /*

Reply via email to