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