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 */

Reply via email to