PERFORCE change 55314 for review

Robert Watson rwatson at FreeBSD.org
Sat Jun 19 15:26:22 GMT 2004


http://perforce.freebsd.org/chv.cgi?CH=55314

Change 55314 by rwatson at rwatson_paprika on 2004/06/19 15:25:36

	Integrate netperf_socket.

Affected files ...

.. //depot/projects/netperf_socket/sys/amd64/include/pmap.h#10 integrate
.. //depot/projects/netperf_socket/sys/geom/geom_dev.c#4 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/machdep.c#7 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_descrip.c#10 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_proc.c#9 integrate
.. //depot/projects/netperf_socket/sys/kern/sysv_shm.c#4 integrate
.. //depot/projects/netperf_socket/sys/kern/vfs_syscalls.c#10 integrate
.. //depot/projects/netperf_socket/sys/net/pfil.h#2 integrate
.. //depot/projects/netperf_socket/sys/sys/_lock.h#3 integrate
.. //depot/projects/netperf_socket/sys/sys/file.h#3 integrate
.. //depot/projects/netperf_socket/sys/sys/proc.h#12 integrate
.. //depot/projects/netperf_socket/sys/sys/sysctl.h#7 integrate
.. //depot/projects/netperf_socket/sys/sys/user.h#6 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_page.c#9 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/amd64/include/pmap.h#10 (text+ko) ====

@@ -39,7 +39,7 @@
  *
  *	from: hp300: @(#)pmap.h	7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.119 2004/06/14 01:17:50 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.120 2004/06/19 14:58:34 bde Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -129,9 +129,9 @@
 
 #ifndef LOCORE
 
+#include <sys/queue.h>
 #include <sys/_lock.h>
 #include <sys/_mutex.h>
-#include <sys/queue.h>
 
 typedef u_int64_t pd_entry_t;
 typedef u_int64_t pt_entry_t;

==== //depot/projects/netperf_socket/sys/geom/geom_dev.c#4 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_dev.c,v 1.76 2004/06/17 21:24:12 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_dev.c,v 1.77 2004/06/19 09:00:53 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -44,6 +44,7 @@
 #include <sys/bio.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
+#include <sys/proc.h>
 #include <sys/errno.h>
 #include <sys/time.h>
 #include <sys/disk.h>
@@ -160,6 +161,7 @@
 
 	g_trace(G_T_ACCESS, "g_dev_open(%s, %d, %d, %p)",
 	    gp->name, flags, fmt, td);
+
 	r = flags & FREAD ? 1 : 0;
 	w = flags & FWRITE ? 1 : 0;
 #ifdef notyet
@@ -167,6 +169,15 @@
 #else
 	e = 0;
 #endif
+	if (w) {
+		/*
+		 * When running in very secure mode, do not allow
+		 * opens for writing of any disks.
+		 */
+		error = securelevel_ge(td->td_ucred, 2);
+		if (error)
+			return (error);
+	}
 	g_topology_lock();
 	if (dev->si_devsw == NULL)
 		error = ENXIO;		/* We were orphaned */

==== //depot/projects/netperf_socket/sys/i386/i386/machdep.c#7 (text+ko) ====

@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.591 2004/06/16 09:47:07 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.592 2004/06/19 12:28:48 bde Exp $");
 
 #include "opt_apic.h"
 #include "opt_atalk.h"
@@ -1143,27 +1143,8 @@
 	td->td_pcb->pcb_flags &= ~FP_SOFTFP;
 
 	/*
-	 * Arrange to trap the next npx or `fwait' instruction (see npx.c
-	 * for why fwait must be trapped at least if there is an npx or an
-	 * emulator).  This is mainly to handle the case where npx0 is not
-	 * configured, since the npx routines normally set up the trap
-	 * otherwise.  It should be done only at boot time, but doing it
-	 * here allows modifying `npx_exists' for testing the emulator on
-	 * systems with an npx.
-	 */
-	load_cr0(rcr0() | CR0_MP | CR0_TS);
-
-	/* Initialize the npx (if any) for the current process. */
-	/*
-	 * XXX the above load_cr0() also initializes it and is a layering
-	 * violation if NPX is configured.  It drops the npx partially
-	 * and this would be fatal if we were interrupted now, and decided
-	 * to force the state to the pcb, and checked the invariant
-	 * (CR0_TS clear) if and only if PCPU_GET(fpcurthread) != NULL).
-	 * ALL of this can happen except the check.  The check used to
-	 * happen and be fatal later when we didn't complete the drop
-	 * before returning to user mode.  This should be fixed properly
-	 * soon.
+	 * Drop the FP state if we hold it, so that the process gets a
+	 * clean FP state if it uses the FPU again.
 	 */
 	fpstate_drop(td);
 
@@ -1181,10 +1162,11 @@
 	unsigned int cr0;
 
 	cr0 = rcr0();
-#ifdef SMP
-	cr0 |= CR0_NE;			/* Done by npxinit() */
-#endif
-	cr0 |= CR0_MP | CR0_TS;		/* Done at every execve() too. */
+	/*
+	 * CR0_MP, CR0_NE and CR0_TS are also set by npx_probe() for the
+	 * BSP.  See the comments there about why we set them.
+	 */
+	cr0 |= CR0_MP | CR0_NE | CR0_TS;
 #ifndef I386_CPU
 	cr0 |= CR0_WP | CR0_AM;
 #endif

==== //depot/projects/netperf_socket/sys/kern/kern_descrip.c#10 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_descrip.c,v 1.234 2004/06/16 09:47:12 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_descrip.c,v 1.235 2004/06/19 11:40:08 phk Exp $");
 
 #include "opt_compat.h"
 
@@ -1326,6 +1326,8 @@
 		fp->f_count++;
 	fp->f_cred = crhold(td->td_ucred);
 	fp->f_ops = &badfileops;
+	fp->f_data = NULL;
+	fp->f_vnode = NULL;
 	FILEDESC_LOCK(p->p_fd);
 	if ((fq = p->p_fd->fd_ofiles[0])) {
 		LIST_INSERT_AFTER(fq, fp, f_list);
@@ -2360,6 +2362,7 @@
 			xf.xf_fd = n;
 			xf.xf_file = fp;
 			xf.xf_data = fp->f_data;
+			xf.xf_vnode = fp->f_vnode;
 			xf.xf_type = fp->f_type;
 			xf.xf_count = fp->f_count;
 			xf.xf_msgcount = fp->f_msgcount;

==== //depot/projects/netperf_socket/sys/kern/kern_proc.c#9 (text+ko) ====

@@ -27,11 +27,11 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_proc.c	8.7 (Berkeley) 2/14/95
- * $FreeBSD: src/sys/kern/kern_proc.c,v 1.207 2004/06/17 17:16:48 phk Exp $
+ * $FreeBSD: src/sys/kern/kern_proc.c,v 1.209 2004/06/19 14:09:40 gad Exp $
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_proc.c,v 1.207 2004/06/17 17:16:48 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_proc.c,v 1.209 2004/06/19 14:09:40 gad Exp $");
 
 #include "opt_ktrace.h"
 #include "opt_kstack_pages.h"
@@ -694,10 +694,11 @@
 		kp->ki_start = p->p_stats->p_start;
 		timevaladd(&kp->ki_start, &boottime);
 		kp->ki_rusage = p->p_stats->p_ru;
-		kp->ki_childtime.tv_sec = p->p_stats->p_cru.ru_utime.tv_sec +
-		    p->p_stats->p_cru.ru_stime.tv_sec;
-		kp->ki_childtime.tv_usec = p->p_stats->p_cru.ru_utime.tv_usec +
-		    p->p_stats->p_cru.ru_stime.tv_usec;
+		kp->ki_childstime = p->p_stats->p_cru.ru_stime;
+		kp->ki_childutime = p->p_stats->p_cru.ru_utime;
+		/* Some callers want child-times in a single value */
+		kp->ki_childtime = kp->ki_childstime;
+		timevaladd(&kp->ki_childtime, &kp->ki_childutime);
 	}
 	if (p->p_state != PRS_ZOMBIE) {
 #if 0
@@ -805,6 +806,9 @@
 		strlcpy(kp->ki_comm, p->p_comm, sizeof(kp->ki_comm));
 		strlcpy(kp->ki_ocomm, p->p_comm, sizeof(kp->ki_ocomm));
 	}
+	if (p->p_sysent && p->p_sysent->sv_name != NULL &&
+	    p->p_sysent->sv_name[0] != '\0')
+		strlcpy(kp->ki_emul, p->p_sysent->sv_name, sizeof(kp->ki_emul));
 	kp->ki_siglist = p->p_siglist;
         SIGSETOR(kp->ki_siglist, td->td_siglist);
 	kp->ki_sigmask = td->td_sigmask;
@@ -978,6 +982,14 @@
 			 */
 			switch (oid_number) {
 
+			case KERN_PROC_GID:
+				if (p->p_ucred == NULL ||
+				    p->p_ucred->cr_gid != (gid_t)name[0]) {
+					PROC_UNLOCK(p);
+					continue;
+				}
+				break;
+
 			case KERN_PROC_PGRP:
 				/* could do this by traversing pgrp */
 				if (p->p_pgrp == NULL || 
@@ -1187,6 +1199,9 @@
 SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT,
 	0, 0, sysctl_kern_proc, "S,proc", "Return entire process table");
 
+SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD,
+	sysctl_kern_proc, "Process table");
+
 SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD, 
 	sysctl_kern_proc, "Process table");
 
@@ -1217,6 +1232,9 @@
 SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD,
 	sysctl_kern_proc_sv_name, "Process syscall vector name (ABI type)");
 
+SYSCTL_NODE(_kern_proc, (KERN_PROC_GID | KERN_PROC_INC_THREAD), gid_td,
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
+
 SYSCTL_NODE(_kern_proc, (KERN_PROC_PGRP | KERN_PROC_INC_THREAD), pgrp_td,
 	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 

==== //depot/projects/netperf_socket/sys/kern/sysv_shm.c#4 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/sysv_shm.c,v 1.91 2004/05/30 20:34:58 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/sysv_shm.c,v 1.92 2004/06/19 14:46:13 tjr Exp $");
 
 #include "opt_compat.h"
 #include "opt_sysvipc.h"
@@ -46,6 +46,7 @@
 #include <sys/mman.h>
 #include <sys/module.h>
 #include <sys/mutex.h>
+#include <sys/resourcevar.h>
 #include <sys/stat.h>
 #include <sys/syscall.h>
 #include <sys/syscallsubr.h>
@@ -370,8 +371,10 @@
 		 * This is just a hint to vm_map_find() about where to
 		 * put it.
 		 */
-		attach_va = round_page((vm_offset_t)p->p_vmspace->vm_taddr
-		    + maxtsiz + maxdsiz);
+		PROC_LOCK(p);
+		attach_va = round_page((vm_offset_t)p->p_vmspace->vm_daddr +
+		    lim_max(p, RLIMIT_DATA));
+		PROC_UNLOCK(p);
 	}
 
 	shm_handle = shmseg->shm_internal;

==== //depot/projects/netperf_socket/sys/kern/vfs_syscalls.c#10 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.349 2004/06/11 11:16:24 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.350 2004/06/19 11:41:45 phk Exp $");
 
 #include "opt_compat.h"
 #include "opt_mac.h"
@@ -1033,9 +1033,11 @@
 		return (0);
 	}
 	fp->f_vnode = vp;
-	fp->f_data = vp;
+	if (fp->f_data == NULL)
+		fp->f_data = vp;
 	fp->f_flag = flags & FMASK;
-	fp->f_ops = &vnops;
+	if (fp->f_ops == &badfileops)
+		fp->f_ops = &vnops;
 	fp->f_seqcount = 1;
 	fp->f_type = (vp->v_type == VFIFO ? DTYPE_FIFO : DTYPE_VNODE);
 	FILEDESC_UNLOCK(fdp);

==== //depot/projects/netperf_socket/sys/net/pfil.h#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$FreeBSD: src/sys/net/pfil.h,v 1.10 2003/09/23 17:54:03 sam Exp $ */
+/*	$FreeBSD: src/sys/net/pfil.h,v 1.11 2004/06/19 14:58:34 bde Exp $ */
 /*	$NetBSD: pfil.h,v 1.22 2003/06/23 12:57:08 martin Exp $	*/
 
 /*
@@ -33,10 +33,10 @@
 #define _NET_PFIL_H_
 
 #include <sys/systm.h>
+#include <sys/queue.h>
 #include <sys/_lock.h>
 #include <sys/_mutex.h>
 #include <sys/condvar.h>	/* XXX */
-#include <sys/queue.h>
 
 struct mbuf;
 struct ifnet;

==== //depot/projects/netperf_socket/sys/sys/_lock.h#3 (text+ko) ====

@@ -25,14 +25,12 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/sys/_lock.h,v 1.9 2004/06/16 12:22:59 phk Exp $
+ * $FreeBSD: src/sys/sys/_lock.h,v 1.10 2004/06/19 14:58:35 bde Exp $
  */
 
 #ifndef _SYS__LOCK_H_
 #define	_SYS__LOCK_H_
 
-#include <sys/queue.h>
-
 struct lock_object {
 	struct	lock_class *lo_class;
 	const	char *lo_name;		/* Individual lock name. */

==== //depot/projects/netperf_socket/sys/sys/file.h#3 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)file.h	8.3 (Berkeley) 1/9/95
- * $FreeBSD: src/sys/sys/file.h,v 1.64 2004/04/07 04:19:49 imp Exp $
+ * $FreeBSD: src/sys/sys/file.h,v 1.65 2004/06/19 11:38:00 phk Exp $
  */
 
 #ifndef _SYS_FILE_H_
@@ -149,6 +149,7 @@
 	int	xf_msgcount;	/* references from message queue */
 	off_t	xf_offset;	/* file offset */
 	void	*xf_data;	/* file descriptor specific data */
+	void	*xf_vnode;	/* vnode pointer */
 	u_int	xf_flag;	/* flags (see fcntl.h) */
 };
 

==== //depot/projects/netperf_socket/sys/sys/proc.h#12 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)proc.h	8.15 (Berkeley) 5/19/95
- * $FreeBSD: src/sys/sys/proc.h,v 1.379 2004/06/16 00:26:30 julian Exp $
+ * $FreeBSD: src/sys/sys/proc.h,v 1.380 2004/06/19 14:58:34 bde Exp $
  */
 
 #ifndef _SYS_PROC_H_
@@ -43,9 +43,9 @@
 #ifndef _KERNEL
 #include <sys/filedesc.h>
 #endif
+#include <sys/queue.h>
 #include <sys/_lock.h>
 #include <sys/_mutex.h>
-#include <sys/queue.h>
 #include <sys/priority.h>
 #include <sys/rtprio.h>			/* XXX. */
 #include <sys/runq.h>

==== //depot/projects/netperf_socket/sys/sys/sysctl.h#7 (text+ko) ====

@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)sysctl.h	8.1 (Berkeley) 6/2/93
- * $FreeBSD: src/sys/sys/sysctl.h,v 1.130 2004/06/16 09:47:24 phk Exp $
+ * $FreeBSD: src/sys/sys/sysctl.h,v 1.131 2004/06/19 13:42:05 gad Exp $
  */
 
 #ifndef _SYS_SYSCTL_H_
@@ -419,9 +419,10 @@
 #define	KERN_PROC_PROC		8	/* only return procs */
 #define	KERN_PROC_SV_NAME	9	/* get syscall vector name */
 #define	KERN_PROC_RGID		10	/* by real group id */
+#define	KERN_PROC_GID		11	/* by effective group id */
 #define	KERN_PROC_INC_THREAD	0x10	/*
 					 * modifier for pid, pgrp, tty,
-					 * uid, ruid, and proc
+					 * uid, ruid, gid, rgid and proc
 					 */
 
 /*

==== //depot/projects/netperf_socket/sys/sys/user.h#6 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)user.h	8.2 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/sys/user.h,v 1.57 2004/06/17 17:16:53 phk Exp $
+ * $FreeBSD: src/sys/sys/user.h,v 1.58 2004/06/19 13:49:25 gad Exp $
  */
 
 #ifndef _SYS_USER_H_
@@ -73,12 +73,15 @@
 #if defined(__alpha__) || defined(__ia64__) || defined(__sparc64__) || \
     defined(__amd64__)
 #define	KINFO_PROC_SIZE	912		/* the correct size for kinfo_proc */
+#define	KI_NSPARE	16		/* number of spare longs to define */
 #endif
-#if	__i386__ || defined __arm__
+#if defined(__i386__) || defined(__arm__)
 #define	KINFO_PROC_SIZE	648		/* the correct size for kinfo_proc */
+#define	KI_NSPARE	15
 #endif
 #ifdef  __powerpc__
 #define	KINFO_PROC_SIZE	656
+#define	KI_NSPARE	16
 #endif
 #ifndef	KINFO_PROC_SIZE
 #error	"Unknown architecture"
@@ -87,6 +90,7 @@
 #define	LOCKNAMELEN	8		/* size of returned lock name */
 #define	OCOMMLEN	16		/* size of returned ki_ocomm name */
 #define	COMMLEN		19		/* size of returned ki_comm name */
+#define	KI_EMULNAMELEN	16		/* size of returned ki_emul */
 #define	KI_NGROUPS	16		/* number of groups in ki_groups */
 #define	LOGNAMELEN	17		/* size of returned ki_login */
 
@@ -108,6 +112,7 @@
 	pid_t	ki_sid;			/* Process session ID */
 	pid_t	ki_tsid;		/* Terminal session ID */
 	short	ki_jobc;		/* job control counter */
+	short	ki_spare_short1;	/* unused (just here for alignment) */
 	dev_t	ki_tdev;		/* controlling tty dev */
 	sigset_t ki_siglist;		/* Signals arrived but not delivered */
 	sigset_t ki_sigmask;		/* Current signal mask */
@@ -119,6 +124,7 @@
 	gid_t	ki_rgid;		/* Real group id */
 	gid_t	ki_svgid;		/* Saved effective group id */
 	short	ki_ngroups;		/* number of groups */
+	short	ki_spare_short2;	/* unused (just here for alignment) */
 	gid_t	ki_groups[KI_NGROUPS];	/* groups */
 	vm_size_t ki_size;		/* virtual size */
 	segsz_t ki_rssize;		/* current resident set size in pages */
@@ -149,14 +155,20 @@
 	char	ki_login[LOGNAMELEN+1];	/* setlogin name */
 	char	ki_lockname[LOCKNAMELEN+1]; /* lock name */
 	char	ki_comm[COMMLEN+1];	/* command name */
-	char	ki_sparestrings[85];	/* spare string space */
+	char	ki_emul[KI_EMULNAMELEN+1];  /* emulation name */
+	char	ki_sparestrings[68];	/* spare string space */
 	struct	rusage ki_rusage;	/* process rusage statistics */
 	long	ki_sflag;		/* PS_* flags */
 	struct	priority ki_pri;	/* process priority */
 	long	ki_tdflags;		/* XXXKSE kthread flag */
 	struct	pcb *ki_pcb;		/* kernel virtual addr of pcb */
 	void	*ki_kstack;		/* kernel virtual addr of stack */
-	long	ki_spare[22];		/* spare constants */
+	struct	timeval ki_childstime;	/* system time used by children */
+	struct	timeval ki_childutime;	/* user time used by children */
+	segsz_t	ki_ps_segsz1;		/* used by `ps', for its processing */
+	float	ki_ps_float1;		/* used by `ps', for its processing */
+	int	ki_spare_int1;		/* unused (just here for alignment) */
+	long	ki_spare[KI_NSPARE];	/* spare room for later growth */
 };
 void fill_kinfo_proc(struct proc *, struct kinfo_proc *);
 

==== //depot/projects/netperf_socket/sys/vm/vm_page.c#9 (text+ko) ====

@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_page.c,v 1.285 2004/06/17 06:16:58 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_page.c,v 1.286 2004/06/19 04:19:47 alc Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -515,7 +515,7 @@
  *	enter the page into the kernel's pmap.  We are not allowed to block
  *	here so we *can't* do this anyway.
  *
- *	The object and page must be locked, and must be splhigh.
+ *	The object and page must be locked.
  *	This routine may not block.
  */
 void
@@ -581,7 +581,7 @@
  *	table and the object page list, but do not invalidate/terminate
  *	the backing store.
  *
- *	The object and page must be locked, and at splhigh.
+ *	The object and page must be locked.
  *	The underlying pmap entry (if any) is NOT removed here.
  *	This routine may not block.
  */
@@ -664,8 +664,6 @@
  *	The object must be locked.
  *	This routine may not block.
  *
- *	Note: this routine will raise itself to splvm(), the caller need not. 
- *
  *	Note: swap associated with the page must be invalidated by the move.  We
  *	      have to do this for several reasons:  (1) we aren't freeing the
  *	      page, (2) we are dirtying the page, (3) the VM system is probably
@@ -681,15 +679,12 @@
 void
 vm_page_rename(vm_page_t m, vm_object_t new_object, vm_pindex_t new_pindex)
 {
-	int s;
 
-	s = splvm();
 	vm_page_remove(m);
 	vm_page_insert(m, new_object, new_pindex);
 	if (m->queue - m->pc == PQ_CACHE)
 		vm_page_deactivate(m);
 	vm_page_dirty(m);
-	splx(s);
 }
 
 /*
@@ -699,7 +694,6 @@
  *	might be found, but not applicable, they are deactivated.  This
  *	keeps us from using potentially busy cached pages.
  *
- *	This routine must be called at splvm().
  *	This routine may not block.
  */
 vm_page_t
@@ -750,7 +744,7 @@
 {
 	vm_object_t m_object;
 	vm_page_t m = NULL;
-	int color, flags, page_req, s;
+	int color, flags, page_req;
 
 	page_req = req & VM_ALLOC_CLASS_MASK;
 
@@ -769,7 +763,6 @@
 		page_req = VM_ALLOC_SYSTEM;
 	};
 
-	s = splvm();
 loop:
 	mtx_lock_spin(&vm_page_queue_free_mtx);
 	if (cnt.v_free_count > cnt.v_free_reserved ||
@@ -792,7 +785,6 @@
 		vm_page_lock_queues();
 		if ((m = vm_page_select_cache(color)) == NULL) {
 			vm_page_unlock_queues();
-			splx(s);
 #if defined(DIAGNOSTIC)
 			if (cnt.v_cache_count > 0)
 				printf("vm_page_alloc(NORMAL): missing pages on cache queue: %d\n", cnt.v_cache_count);
@@ -814,7 +806,6 @@
 		 * Not allocatable from cache from interrupt, give up.
 		 */
 		mtx_unlock_spin(&vm_page_queue_free_mtx);
-		splx(s);
 		atomic_add_int(&vm_pageout_deficit, 1);
 		pagedaemon_wakeup();
 		return (NULL);
@@ -826,13 +817,12 @@
 
 	KASSERT(
 	    m != NULL,
-	    ("vm_page_alloc(): missing page on free queue\n")
+	    ("vm_page_alloc(): missing page on free queue")
 	);
 
 	/*
 	 * Remove from free queue
 	 */
-
 	vm_pageq_remove_nowakeup(m);
 
 	/*
@@ -859,12 +849,6 @@
 	KASSERT(m->dirty == 0, ("vm_page_alloc: free/cache page %p was dirty", m));
 	mtx_unlock_spin(&vm_page_queue_free_mtx);
 
-	/*
-	 * vm_page_insert() is safe prior to the splx().  Note also that
-	 * inserting a page here does not insert it into the pmap (which
-	 * could cause us to block allocating memory).  We cannot block 
-	 * anywhere.
-	 */
 	if ((req & VM_ALLOC_NOOBJ) == 0)
 		vm_page_insert(m, object, pindex);
 	else
@@ -877,7 +861,6 @@
 	if (vm_paging_needed())
 		pagedaemon_wakeup();
 
-	splx(s);
 	return (m);
 }
 
@@ -890,9 +873,7 @@
 void
 vm_wait(void)
 {
-	int s;
 
-	s = splvm();
 	vm_page_lock_queues();
 	if (curproc == pageproc) {
 		vm_pageout_pages_needed = 1;
@@ -906,7 +887,6 @@
 		msleep(&cnt.v_free_count, &vm_page_queue_mtx, PDROP | PVM,
 		    "vmwait", 0);
 	}
-	splx(s);
 }
 
 /*
@@ -922,9 +902,7 @@
 void
 vm_waitpfault(void)
 {
-	int s;
 
-	s = splvm();
 	vm_page_lock_queues();
 	if (!vm_pages_needed) {
 		vm_pages_needed = 1;
@@ -932,7 +910,6 @@
 	}
 	msleep(&cnt.v_free_count, &vm_page_queue_mtx, PDROP | PUSER,
 	    "pfault", 0);
-	splx(s);
 }
 
 /*
@@ -948,10 +925,8 @@
 void
 vm_page_activate(vm_page_t m)
 {
-	int s;
 
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
-	s = splvm();
 	if (m->queue != PQ_ACTIVE) {
 		if ((m->queue - m->pc) == PQ_CACHE)
 			cnt.v_reactivated++;
@@ -965,7 +940,6 @@
 		if (m->act_count < ACT_INIT)
 			m->act_count = ACT_INIT;
 	}
-	splx(s);
 }
 
 /*
@@ -975,8 +949,8 @@
  *	routine is called when a page has been added to the cache or free
  *	queues.
  *
+ *	The page queues must be locked.
  *	This routine may not block.
- *	This routine must be called at splvm()
  */
 static __inline void
 vm_page_free_wakeup(void)
@@ -1016,12 +990,10 @@
 void
 vm_page_free_toq(vm_page_t m)
 {
-	int s;
 	struct vpgqueues *pq;
 	vm_object_t object = m->object;
 
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
-	s = splvm();
 	cnt.v_tfree++;
 
 	if (m->busy || ((m->queue - m->pc) == PQ_FREE)) {
@@ -1049,7 +1021,6 @@
 	 * return, otherwise delay object association removal.
 	 */
 	if ((m->flags & PG_FICTITIOUS) != 0) {
-		splx(s);
 		return;
 	}
 
@@ -1061,7 +1032,7 @@
 			panic("vm_page_free: invalid wire count (%d), pindex: 0x%lx",
 				m->wire_count, (long)m->pindex);
 		}
-		panic("vm_page_free: freeing wired page\n");
+		panic("vm_page_free: freeing wired page");
 	}
 
 	/*
@@ -1111,7 +1082,6 @@
 	}
 	mtx_unlock_spin(&vm_page_queue_free_mtx);
 	vm_page_free_wakeup();
-	splx(s);
 }
 
 /*
@@ -1135,16 +1105,13 @@
 void
 vm_page_unmanage(vm_page_t m)
 {
-	int s;
 
-	s = splvm();
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	if ((m->flags & PG_UNMANAGED) == 0) {
 		if (m->wire_count == 0)
 			vm_pageq_remove(m);
 	}
 	vm_page_flag_set(m, PG_UNMANAGED);
-	splx(s);
 }
 
 /*
@@ -1160,14 +1127,12 @@
 void
 vm_page_wire(vm_page_t m)
 {
-	int s;
 
 	/*
 	 * Only bump the wire statistics if the page is not already wired,
 	 * and only unqueue the page if it is on some queue (if it is unmanaged
 	 * it is already off the queues).
 	 */
-	s = splvm();
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	if (m->flags & PG_FICTITIOUS)
 		return;
@@ -1178,7 +1143,6 @@
 	}
 	m->wire_count++;
 	KASSERT(m->wire_count != 0, ("vm_page_wire: wire_count overflow m=%p", m));
-	splx(s);
 }
 
 /*
@@ -1212,9 +1176,7 @@
 void
 vm_page_unwire(vm_page_t m, int activate)
 {
-	int s;
 
-	s = splvm();
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	if (m->flags & PG_FICTITIOUS)
 		return;
@@ -1232,9 +1194,8 @@
 			}
 		}
 	} else {
-		panic("vm_page_unwire: invalid wire count: %d\n", m->wire_count);
+		panic("vm_page_unwire: invalid wire count: %d", m->wire_count);
 	}
-	splx(s);
 }
 
 
@@ -1251,16 +1212,14 @@
 static __inline void
 _vm_page_deactivate(vm_page_t m, int athead)
 {
-	int s;
 
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+
 	/*
 	 * Ignore if already inactive.
 	 */
 	if (m->queue == PQ_INACTIVE)
 		return;
-
-	s = splvm();
 	if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) {
 		if ((m->queue - m->pc) == PQ_CACHE)
 			cnt.v_reactivated++;
@@ -1274,7 +1233,6 @@
 		vm_page_queues[PQ_INACTIVE].lcnt++;
 		cnt.v_inactive_count++;
 	}
-	splx(s);
 }
 
 void
@@ -1339,7 +1297,6 @@
 void
 vm_page_cache(vm_page_t m)
 {
-	int s;
 
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	if ((m->flags & (PG_BUSY|PG_UNMANAGED)) || m->busy ||
@@ -1359,11 +1316,9 @@
 		panic("vm_page_cache: caching a dirty page, pindex: %ld",
 			(long)m->pindex);
 	}
-	s = splvm();
 	vm_pageq_remove_nowakeup(m);
 	vm_pageq_enqueue(PQ_CACHE + m->pc, m);
 	vm_page_free_wakeup();
-	splx(s);
 }
 
 /*


More information about the p4-projects mailing list