Download raw body.
uvm_fault: loaned pages leftovers
OpenBSD's UVM doesn't have support for loaned pages. Diff below removes
dead code related to such pages.
I've been hitting this hard on my 24 CPUs amd64. ok?
Index: uvm/uvm_fault.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_fault.c,v
diff -u -p -r1.158 uvm_fault.c
--- uvm/uvm_fault.c 27 Dec 2024 12:04:40 -0000 1.158
+++ uvm/uvm_fault.c 1 Jan 2025 15:31:38 -0000
@@ -321,16 +321,9 @@ uvmfault_anonget(struct uvm_faultinfo *u
* The last unlock must be an atomic unlock and wait
* on the owner of page.
*/
- if (pg->uobject) {
- /* Owner of page is UVM object. */
- uvmfault_unlockall(ufi, amap, NULL);
- uvm_pagewait(pg, pg->uobject->vmobjlock,
- "anonget1");
- } else {
- /* Owner of page is anon. */
- uvmfault_unlockall(ufi, NULL, NULL);
- uvm_pagewait(pg, anon->an_lock, "anonget2");
- }
+ KASSERT(pg->uobject == NULL);
+ uvmfault_unlockall(ufi, NULL, NULL);
+ uvm_pagewait(pg, anon->an_lock, "anonget");
} else {
/*
* No page, therefore allocate one.
@@ -998,8 +997,6 @@ uvm_fault_upper(struct uvm_faultinfo *uf
* if it fails (!OK) it will unlock everything for us.
* if it succeeds, locks are still valid and locked.
* also, if it is OK, then the anon's page is on the queues.
- * if the page is on loan from a uvm_object, then anonget will
- * lock that object for us if it does not fail.
*/
error = uvmfault_anonget(ufi, amap, anon);
switch (error) {
uvm_fault: loaned pages leftovers