Index | Thread | Search

From:
Mark Kettenis <mark.kettenis@xs4all.nl>
Subject:
Re: uvm_fault: loaned pages leftovers
To:
Martin Pieuchot <mpi@grenadille.net>
Cc:
tech@openbsd.org
Date:
Mon, 20 Jan 2025 12:00:43 +0100

Download raw body.

Thread
> Date: Mon, 20 Jan 2025 10:09:24 +0100
> From: Martin Pieuchot <mpi@grenadille.net>
> 
> On 03/01/25(Fri) 16:39, Martin Pieuchot wrote:
> > 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?
> 
> Anyone?

We haven't seen any panics from the previous commits, so let's see if
we can hit this panic.

ok kettenis@

> > 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) {
> > 
> > 
> 
> 
>