Module Name: src Committed By: kamil Date: Tue May 26 00:50:54 UTC 2020
Modified Files: src/sys/dev/iscsi: iscsi_ioctl.c src/sys/kern: kern_proc.c sys_process.c src/sys/uvm: uvm_extern.h uvm_map.h Log Message: Catch up with the usage of struct vmspace::vm_refcnt Use the dedicated reference counting routines. Change the type of struct vmspace::vm_refcnt and struct vm_map::ref_count to volatile. Remove the unnecessary vm->vm_map.misc_lock locking in process_domem(). Reviewed by <ad> To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/dev/iscsi/iscsi_ioctl.c cvs rdiff -u -r1.253 -r1.254 src/sys/kern/kern_proc.c cvs rdiff -u -r1.179 -r1.180 src/sys/kern/sys_process.c cvs rdiff -u -r1.226 -r1.227 src/sys/uvm/uvm_extern.h cvs rdiff -u -r1.79 -r1.80 src/sys/uvm/uvm_map.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/iscsi/iscsi_ioctl.c diff -u src/sys/dev/iscsi/iscsi_ioctl.c:1.30 src/sys/dev/iscsi/iscsi_ioctl.c:1.31 --- src/sys/dev/iscsi/iscsi_ioctl.c:1.30 Fri Dec 7 14:59:19 2018 +++ src/sys/dev/iscsi/iscsi_ioctl.c Tue May 26 00:50:54 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsi_ioctl.c,v 1.30 2018/12/07 14:59:19 mlelstv Exp $ */ +/* $NetBSD: iscsi_ioctl.c,v 1.31 2020/05/26 00:50:54 kamil Exp $ */ /*- * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc. @@ -1308,7 +1308,7 @@ map_databuf(struct proc *p, void **buf, if ((p->p_sflag & PS_WEXIT) || (p->p_vmspace->vm_refcnt < 1)) { return ISCSI_STATUS_NO_RESOURCES; } - p->p_vmspace->vm_refcnt++; + uvmspace_addref(p->p_vmspace); /* this is lifted from uvm_io */ error = uvm_map_extract(&p->p_vmspace->vm_map, databuf, datalen, Index: src/sys/kern/kern_proc.c diff -u src/sys/kern/kern_proc.c:1.253 src/sys/kern/kern_proc.c:1.254 --- src/sys/kern/kern_proc.c:1.253 Sat May 23 23:42:43 2020 +++ src/sys/kern/kern_proc.c Tue May 26 00:50:53 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_proc.c,v 1.253 2020/05/23 23:42:43 ad Exp $ */ +/* $NetBSD: kern_proc.c,v 1.254 2020/05/26 00:50:53 kamil Exp $ */ /*- * Copyright (c) 1999, 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc. @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_proc.c,v 1.253 2020/05/23 23:42:43 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_proc.c,v 1.254 2020/05/26 00:50:53 kamil Exp $"); #ifdef _KERNEL_OPT #include "opt_kstack.h" @@ -1753,7 +1753,7 @@ proc_vmspace_getref(struct proc *p, stru /* curproc exception is for coredump. */ if ((p != curproc && (p->p_sflag & PS_WEXIT) != 0) || - (p->p_vmspace->vm_refcnt < 1)) { /* XXX */ + (p->p_vmspace->vm_refcnt < 1)) { return EFAULT; } Index: src/sys/kern/sys_process.c diff -u src/sys/kern/sys_process.c:1.179 src/sys/kern/sys_process.c:1.180 --- src/sys/kern/sys_process.c:1.179 Thu Apr 13 07:58:45 2017 +++ src/sys/kern/sys_process.c Tue May 26 00:50:53 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_process.c,v 1.179 2017/04/13 07:58:45 skrll Exp $ */ +/* $NetBSD: sys_process.c,v 1.180 2020/05/26 00:50:53 kamil Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -118,7 +118,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_process.c,v 1.179 2017/04/13 07:58:45 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_process.c,v 1.180 2020/05/26 00:50:53 kamil Exp $"); #ifdef _KERNEL_OPT #include "opt_ptrace.h" @@ -168,12 +168,10 @@ process_domem(struct lwp *curl /*tracer* vm = p->p_vmspace; - mutex_enter(&vm->vm_map.misc_lock); if ((l->l_flag & LW_WEXIT) || vm->vm_refcnt < 1) error = EFAULT; if (error == 0) - p->p_vmspace->vm_refcnt++; /* XXX */ - mutex_exit(&vm->vm_map.misc_lock); + uvmspace_addref(p->p_vmspace); if (error != 0) return error; error = uvm_io(&vm->vm_map, uio, pax_mprotect_prot(l)); Index: src/sys/uvm/uvm_extern.h diff -u src/sys/uvm/uvm_extern.h:1.226 src/sys/uvm/uvm_extern.h:1.227 --- src/sys/uvm/uvm_extern.h:1.226 Sat May 9 15:13:19 2020 +++ src/sys/uvm/uvm_extern.h Tue May 26 00:50:53 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_extern.h,v 1.226 2020/05/09 15:13:19 thorpej Exp $ */ +/* $NetBSD: uvm_extern.h,v 1.227 2020/05/26 00:50:53 kamil Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -566,8 +566,7 @@ extern bool vm_page_zero_enable; */ struct vmspace { struct vm_map vm_map; /* VM address map */ - int vm_refcnt; /* number of references * - * note: protected by vm_map.misc_lock */ + volatile int vm_refcnt; /* number of references */ void * vm_shm; /* SYS5 shared memory private data XXX */ /* we copy from vm_startcopy to the end of the structure on fork */ #define vm_startcopy vm_rssize Index: src/sys/uvm/uvm_map.h diff -u src/sys/uvm/uvm_map.h:1.79 src/sys/uvm/uvm_map.h:1.80 --- src/sys/uvm/uvm_map.h:1.79 Sat Mar 14 14:15:43 2020 +++ src/sys/uvm/uvm_map.h Tue May 26 00:50:53 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_map.h,v 1.79 2020/03/14 14:15:43 ad Exp $ */ +/* $NetBSD: uvm_map.h,v 1.80 2020/05/26 00:50:53 kamil Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -220,7 +220,7 @@ struct vm_map { struct vm_map_entry header; /* List of entries */ int nentries; /* Number of entries */ vsize_t size; /* virtual size */ - int ref_count; /* Reference count */ + volatile int ref_count; /* Reference count */ struct vm_map_entry * hint; /* hint for quick lookups */ struct vm_map_entry * first_free; /* First free space hint */ unsigned int timestamp; /* Version number */