Date: Tue, 15 Mar 2022 16:26:39 GMT From: Mark Johnston <markj@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 76dcbd770d7b - stable/13 - proc: Relax proc_rwmem()'s assertion on the process hold count Message-ID: <202203151626.22FGQdc3024793@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=76dcbd770d7b1e37e3fe14472d9f339b9180ebd8 commit 76dcbd770d7b1e37e3fe14472d9f339b9180ebd8 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2022-03-01 16:48:39 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2022-03-15 15:39:55 +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. Thus, make the assertion conditional on "p != curproc". Also assert that the process is not already exiting. No functional change intended. Sponsored by: The FreeBSD Foundation (cherry picked from commit 12fb39ec3e6bc529feff3ba2862c6a4a30bd54eb) --- 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 1b9c00179bda..273adca19a0d 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -215,11 +215,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?202203151626.22FGQdc3024793>