Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Apr 2022 02:03:14 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Mark Johnston <markj@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 12fb39ec3e6b - main - proc: Relax proc_rwmem()'s assertion on the process hold count
Message-ID:  <Ykt5MtaYq976GFPg@kib.kiev.ua>
In-Reply-To: <Ykt4qtwH9qRg9kkV@kib.kiev.ua>
References:  <202203011741.221Hftwu093303@gitrepo.freebsd.org> <Ykt4qtwH9qRg9kkV@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 05, 2022 at 02:01:04AM +0300, Konstantin Belousov wrote:
> On Tue, Mar 01, 2022 at 05:41:55PM +0000, Mark Johnston wrote:
> > The branch main has been updated by markj:
> > 
> > URL: https://cgit.FreeBSD.org/src/commit/?id=12fb39ec3e6bc529feff3ba2862c6a4a30bd54eb
> > 
> > commit 12fb39ec3e6bc529feff3ba2862c6a4a30bd54eb
> > Author:     Mark Johnston <markj@FreeBSD.org>
> > AuthorDate: 2022-03-01 16:48:39 +0000
> > Commit:     Mark Johnston <markj@FreeBSD.org>
> > CommitDate: 2022-03-01 17:40:35 +0000
> > 
> >     proc: Relax proc_rwmem()'s assertion on the process hold count
> >     
> >     This reference ensures that the process and its associated vmspace will
> >     not be destroyed while proc_rwmem() is executing.  If, however, the
> >     calling thread belongs to the target process, then it is unnecessary to
> >     hold the process.  In particular, fasttrap - a module which enables
> >     userspace dtrace - may frequently call proc_rwmem(), and we'd prefer to
> >     avoid the overhead of locking and bumping the hold count when possible.
> In fact I am not sure it makes much sense to disable swap out for remote
> process as well.  With the current definition of p_hold, it only prevents
> kstack pages reuse, which should be irrelevant for proc_rwmem().

What probably should be done is referencing the target process vmspace,
instead.
> 
> >     
> >     Thus, make the assertion conditional on "p != curproc".  Also assert
> >     that the process is not already exiting.  No functional change intended.
> >     
> >     MFC after:      2 weeks
> >     Sponsored by:   The FreeBSD Foundation
> > ---
> >  sys/kern/sys_process.c | 9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
> > index 582bff962f1a..8d8c5a1d34ff 100644
> > --- a/sys/kern/sys_process.c
> > +++ b/sys/kern/sys_process.c
> > @@ -336,11 +336,12 @@ proc_rwmem(struct proc *p, struct uio *uio)
> >  	int error, fault_flags, page_offset, writing;
> >  
> >  	/*
> > -	 * Assert that someone has locked this vmspace.  (Should be
> > -	 * curthread but we can't assert that.)  This keeps the process
> > -	 * from exiting out from under us until this operation completes.
> > +	 * Make sure that the process' vmspace remains live.
> >  	 */
> > -	PROC_ASSERT_HELD(p);
> > +	if (p != curproc)
> > +		PROC_ASSERT_HELD(p);
> > +	KASSERT((p->p_flag & P_WEXIT) == 0,
> > +	    ("%s: process %p is exiting", __func__, p));
> >  	PROC_LOCK_ASSERT(p, MA_NOTOWNED);
> >  
> >  	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Ykt5MtaYq976GFPg>