Hi, Test the iterated range, instead of the range chosen to not meet the assert. This has been broken for a long time, but apparently no-one hit it so far. While here, change the KASSERT to a KDASSERT, as it is a validation of internal state of pmemrange.
Ok? -- Ariane Index: uvm_pmemrange.c =================================================================== RCS file: /cvs/src/sys/uvm/uvm_pmemrange.c,v retrieving revision 1.18 diff -u -d -p -r1.18 uvm_pmemrange.c --- uvm_pmemrange.c 28 Aug 2010 22:27:47 -0000 1.18 +++ uvm_pmemrange.c 4 Apr 2011 14:01:41 -0000 @@ -1630,8 +1630,8 @@ uvm_pmr_rootupdate(struct uvm_pmemrange for (low = RB_NEXT(uvm_pmr_addr, &pmr->addr, low); low != high; low = RB_NEXT(uvm_pmr_addr, &pmr->addr, low)) { - KASSERT(PMR_IS_SUBRANGE_OF(atop(VM_PAGE_TO_PHYS(high_next)), - atop(VM_PAGE_TO_PHYS(high_next)) + high_next->fpgsz, + KDASSERT(PMR_IS_SUBRANGE_OF(atop(VM_PAGE_TO_PHYS(low)), + atop(VM_PAGE_TO_PHYS(low)) + low->fpgsz, start, end)); if (uvm_pmr_pg_to_memtype(low) == memtype) return low;