Here's another small tweak I could extract from the UVM unlocking diff.
This doesn't introduce any functional change. uvm_km_pgremove() is used
in only one place.
Ok?
Index: uvm/uvm_km.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_km.c,v
retrieving revision 1.145
diff -u -p -r1.145 uvm_km.c
--- uvm/uvm_km.c 15 Jun 2021 16:38:09 -0000 1.145
+++ uvm/uvm_km.c 24 Oct 2021 13:23:22 -0000
@@ -239,8 +239,10 @@ uvm_km_suballoc(struct vm_map *map, vadd
* the pages right away. (this gets called from uvm_unmap_...).
*/
void
-uvm_km_pgremove(struct uvm_object *uobj, vaddr_t start, vaddr_t end)
+uvm_km_pgremove(struct uvm_object *uobj, vaddr_t startva, vaddr_t endva)
{
+ const voff_t start = startva - vm_map_min(kernel_map);
+ const voff_t end = endva - vm_map_min(kernel_map);
struct vm_page *pp;
voff_t curoff;
int slot;
@@ -248,6 +250,7 @@ uvm_km_pgremove(struct uvm_object *uobj,
KASSERT(UVM_OBJ_IS_AOBJ(uobj));
+ pmap_remove(pmap_kernel(), startva, endva);
for (curoff = start ; curoff < end ; curoff += PAGE_SIZE) {
pp = uvm_pagelookup(uobj, curoff);
if (pp && pp->pg_flags & PG_BUSY) {
Index: uvm/uvm_map.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_map.c,v
retrieving revision 1.278
diff -u -p -r1.278 uvm_map.c
--- uvm/uvm_map.c 5 Oct 2021 15:37:21 -0000 1.278
+++ uvm/uvm_map.c 24 Oct 2021 13:24:21 -0000
@@ -2155,10 +2155,8 @@ uvm_unmap_kill_entry(struct vm_map *map,
* from the object. offsets are always relative
* to vm_map_min(kernel_map).
*/
- pmap_remove(pmap_kernel(), entry->start, entry->end);
- uvm_km_pgremove(entry->object.uvm_obj,
- entry->start - vm_map_min(kernel_map),
- entry->end - vm_map_min(kernel_map));
+ uvm_km_pgremove(entry->object.uvm_obj, entry->start,
+ entry->end);
/*
* null out kernel_object reference, we've just