Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Feb 2004 14:21:51 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 46502 for review
Message-ID:  <200402042221.i14MLpRi081178@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=46502

Change 46502 by jhb@jhb_slimer on 2004/02/04 14:20:53

	IFC @46501, loop back limit locking.

Affected files ...

.. //depot/projects/smpng/sys/alpha/linux/linux_machdep.c#16 integrate
.. //depot/projects/smpng/sys/alpha/linux/linux_proto.h#10 integrate
.. //depot/projects/smpng/sys/alpha/linux/linux_syscall.h#8 integrate
.. //depot/projects/smpng/sys/alpha/linux/linux_sysent.c#8 integrate
.. //depot/projects/smpng/sys/alpha/linux/syscalls.master#9 integrate
.. //depot/projects/smpng/sys/alpha/osf1/osf1_misc.c#25 integrate
.. //depot/projects/smpng/sys/alpha/osf1/osf1_proto.h#6 integrate
.. //depot/projects/smpng/sys/alpha/osf1/osf1_syscall.h#5 integrate
.. //depot/projects/smpng/sys/alpha/osf1/osf1_sysent.c#5 integrate
.. //depot/projects/smpng/sys/alpha/osf1/syscalls.master#5 integrate
.. //depot/projects/smpng/sys/compat/ia32/ia32_sysvec.c#8 integrate
.. //depot/projects/smpng/sys/compat/linux/linux_misc.c#45 integrate
.. //depot/projects/smpng/sys/compat/ndis/subr_ndis.c#8 integrate
.. //depot/projects/smpng/sys/compat/svr4/imgact_svr4.c#10 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_filio.c#14 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#30 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_proto.h#5 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_resource.c#9 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_syscall.h#4 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_syscallnames.c#4 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_sysent.c#4 integrate
.. //depot/projects/smpng/sys/compat/svr4/syscalls.master#4 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.c#18 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.h#15 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.reg#13 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.seq#12 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx_inline.h#12 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx_pci.c#16 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic7xxx.c#18 integrate
.. //depot/projects/smpng/sys/dev/ofw/ofw_disk.c#9 integrate
.. //depot/projects/smpng/sys/dev/puc/pucdata.c#23 integrate
.. //depot/projects/smpng/sys/fs/fdescfs/fdesc_vfsops.c#11 integrate
.. //depot/projects/smpng/sys/fs/msdosfs/msdosfs_vnops.c#23 integrate
.. //depot/projects/smpng/sys/fs/nwfs/nwfs_io.c#11 integrate
.. //depot/projects/smpng/sys/fs/procfs/procfs_rlimit.c#4 integrate
.. //depot/projects/smpng/sys/fs/smbfs/smbfs_io.c#15 integrate
.. //depot/projects/smpng/sys/gnu/ext2fs/ext2_readwrite.c#5 integrate
.. //depot/projects/smpng/sys/i386/i386/apic_vector.s#6 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_isc_syscall.h#3 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_isc_sysent.c#4 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_misc.c#13 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_proto.h#5 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_syscall.h#4 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_sysent.c#5 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix.h#5 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix_syscall.h#4 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix_sysent.c#5 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/syscalls.isc#3 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/syscalls.master#4 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/syscalls.xenix#3 integrate
.. //depot/projects/smpng/sys/i386/isa/atpic_vector.s#6 integrate
.. //depot/projects/smpng/sys/i386/linux/imgact_linux.c#14 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_machdep.c#24 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_proto.h#14 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_syscall.h#13 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_sysent.c#14 integrate
.. //depot/projects/smpng/sys/i386/linux/syscalls.master#13 integrate
.. //depot/projects/smpng/sys/kern/imgact_aout.c#21 integrate
.. //depot/projects/smpng/sys/kern/imgact_elf.c#31 integrate
.. //depot/projects/smpng/sys/kern/imgact_gzip.c#9 integrate
.. //depot/projects/smpng/sys/kern/init_main.c#41 integrate
.. //depot/projects/smpng/sys/kern/kern_acct.c#31 integrate
.. //depot/projects/smpng/sys/kern/kern_descrip.c#56 integrate
.. //depot/projects/smpng/sys/kern/kern_exit.c#70 integrate
.. //depot/projects/smpng/sys/kern/kern_fork.c#71 integrate
.. //depot/projects/smpng/sys/kern/kern_resource.c#40 integrate
.. //depot/projects/smpng/sys/kern/kern_sig.c#86 integrate
.. //depot/projects/smpng/sys/kern/kern_subr.c#30 integrate
.. //depot/projects/smpng/sys/kern/kern_sx.c#21 integrate
.. //depot/projects/smpng/sys/kern/subr_trap.c#61 integrate
.. //depot/projects/smpng/sys/kern/sys_generic.c#30 integrate
.. //depot/projects/smpng/sys/kern/tty.c#39 integrate
.. //depot/projects/smpng/sys/kern/uipc_mbuf.c#25 integrate
.. //depot/projects/smpng/sys/kern/uipc_socket2.c#30 integrate
.. //depot/projects/smpng/sys/kern/uipc_syscalls.c#46 integrate
.. //depot/projects/smpng/sys/net/if.c#42 integrate
.. //depot/projects/smpng/sys/netinet/ip_output.c#49 integrate
.. //depot/projects/smpng/sys/netinet/raw_ip.c#35 integrate
.. //depot/projects/smpng/sys/netinet/tcp_input.c#46 integrate
.. //depot/projects/smpng/sys/netinet/tcp_output.c#20 integrate
.. //depot/projects/smpng/sys/netinet/udp_usrreq.c#38 integrate
.. //depot/projects/smpng/sys/netinet6/icmp6.c#21 integrate
.. //depot/projects/smpng/sys/netinet6/in6_src.c#17 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_output.c#28 integrate
.. //depot/projects/smpng/sys/netinet6/ipsec.c#14 integrate
.. //depot/projects/smpng/sys/netinet6/ipsec.h#8 integrate
.. //depot/projects/smpng/sys/netinet6/ipsec6.h#4 integrate
.. //depot/projects/smpng/sys/netinet6/nd6_nbr.c#10 integrate
.. //depot/projects/smpng/sys/netinet6/raw_ip6.c#23 integrate
.. //depot/projects/smpng/sys/netinet6/udp6_output.c#15 integrate
.. //depot/projects/smpng/sys/netinet6/udp6_usrreq.c#26 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_bio.c#24 integrate
.. //depot/projects/smpng/sys/opencrypto/rijndael.c#3 integrate
.. //depot/projects/smpng/sys/posix4/_semaphore.h#3 integrate
.. //depot/projects/smpng/sys/posix4/semaphore.h#6 integrate
.. //depot/projects/smpng/sys/powerpc/include/pcpu.h#5 integrate
.. //depot/projects/smpng/sys/powerpc/powermac/openpic_macio.c#3 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/genassym.c#19 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/locore.S#3 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/machdep.c#48 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/nexus.c#6 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/pmap.c#36 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/trap_subr.S#9 integrate
.. //depot/projects/smpng/sys/powerpc/psim/psim-tree#2 integrate
.. //depot/projects/smpng/sys/sys/proc.h#110 integrate
.. //depot/projects/smpng/sys/sys/resource.h#9 integrate
.. //depot/projects/smpng/sys/sys/resourcevar.h#14 integrate
.. //depot/projects/smpng/sys/sys/sockio.h#7 integrate
.. //depot/projects/smpng/sys/sys/sx.h#12 integrate
.. //depot/projects/smpng/sys/sys/ttycom.h#2 integrate
.. //depot/projects/smpng/sys/sys/uio.h#15 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_vnops.c#26 integrate
.. //depot/projects/smpng/sys/vm/vm_glue.c#37 integrate
.. //depot/projects/smpng/sys/vm/vm_map.c#54 integrate
.. //depot/projects/smpng/sys/vm/vm_mmap.c#39 integrate
.. //depot/projects/smpng/sys/vm/vm_pageout.c#40 integrate
.. //depot/projects/smpng/sys/vm/vm_unix.c#9 integrate

Differences ...

==== //depot/projects/smpng/sys/alpha/linux/linux_machdep.c#16 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.32 2003/08/22 07:20:26 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.33 2004/02/04 21:52:52 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -382,7 +382,7 @@
 	if ((error =
 	   copyin(uap->rlim, &rlim, sizeof (struct rlimit))))
 		return (error);
-	return dosetrlimit(td,  which, &rlim);
+	return (kern_setrlimit(td,  which, &rlim));
 }
 
 int
@@ -390,7 +390,9 @@
 	struct thread *td;
 	struct linux_getrlimit_args *uap;
 {
+	struct rlimit rlim;
 	u_int which;
+	int error;
 
 #ifdef DEBUG
 	if (ldebug(getrlimit))
@@ -405,6 +407,9 @@
 	if (which == -1)
 		return EINVAL;
 
-	return (copyout(&td->td_proc->p_rlimit[which],
-	    uap->rlim, sizeof (struct rlimit)));
+	PROC_LOCK(td->td_proc);
+	lim_rlimit(td->td_proc, which, &rlim);
+	PROC_UNLOCK(td->td_proc);
+	error = copyout(&rlim, uap->rlim, sizeof (struct rlimit));
+	return (error);
 }

==== //depot/projects/smpng/sys/alpha/linux/linux_proto.h#10 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/alpha/linux/linux_proto.h,v 1.14 2003/12/23 03:53:50 peter Exp $
- * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.54 2003/12/23 03:53:21 peter Exp 
+ * $FreeBSD: src/sys/alpha/linux/linux_proto.h,v 1.15 2004/02/04 22:00:41 jhb Exp $
+ * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.55 2004/02/04 21:56:59 jhb Exp 
  */
 
 #ifndef _LINUX_SYSPROTO_H_

==== //depot/projects/smpng/sys/alpha/linux/linux_syscall.h#8 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/alpha/linux/linux_syscall.h,v 1.12 2003/12/23 03:53:50 peter Exp $
- * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.54 2003/12/23 03:53:21 peter Exp 
+ * $FreeBSD: src/sys/alpha/linux/linux_syscall.h,v 1.13 2004/02/04 22:00:41 jhb Exp $
+ * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.55 2004/02/04 21:56:59 jhb Exp 
  */
 
 #define	LINUX_SYS_exit	1

==== //depot/projects/smpng/sys/alpha/linux/linux_sysent.c#8 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/alpha/linux/linux_sysent.c,v 1.12 2003/12/23 03:53:50 peter Exp $
- * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.54 2003/12/23 03:53:21 peter Exp 
+ * $FreeBSD: src/sys/alpha/linux/linux_sysent.c,v 1.13 2004/02/04 22:00:41 jhb Exp $
+ * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.55 2004/02/04 21:56:59 jhb Exp 
  */
 
 #include "opt_compat.h"
@@ -161,8 +161,8 @@
 	{ AS(ogetpeername_args), (sy_call_t *)ogetpeername },	/* 141 = ogetpeername */
 	{ 0, (sy_call_t *)nosys },			/* 142 =  */
 	{ 0, (sy_call_t *)nosys },			/* 143 =  */
-	{ AS(linux_getrlimit_args), (sy_call_t *)linux_getrlimit },	/* 144 = linux_getrlimit */
-	{ AS(linux_setrlimit_args), (sy_call_t *)linux_setrlimit },	/* 145 = linux_setrlimit */
+	{ SYF_MPSAFE | AS(linux_getrlimit_args), (sy_call_t *)linux_getrlimit },	/* 144 = linux_getrlimit */
+	{ SYF_MPSAFE | AS(linux_setrlimit_args), (sy_call_t *)linux_setrlimit },	/* 145 = linux_setrlimit */
 	{ 0, (sy_call_t *)nosys },			/* 146 =  */
 	{ SYF_MPSAFE | 0, (sy_call_t *)setsid },	/* 147 = setsid */
 	{ 0, (sy_call_t *)linux_quotactl },		/* 148 = linux_quotactl */

==== //depot/projects/smpng/sys/alpha/linux/syscalls.master#9 (text+ko) ====

@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.54 2003/12/23 03:53:21 peter Exp $
+ $FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.55 2004/02/04 21:56:59 jhb Exp $
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 ; System call name/number master file (or rather, slave, from LINUX).
@@ -194,9 +194,9 @@
 141	NOPROTO	{ int ogetpeername(int fdes, caddr_t asa, int *alen); }
 142	UNIMPL
 143	UNIMPL
-144	STD	{ int linux_getrlimit(l_uint resource, \
+144	MSTD	{ int linux_getrlimit(l_uint resource, \
 				struct l_rlimit *rlim); }
-145	STD	{ int linux_setrlimit(l_uint resource, \
+145	MSTD	{ int linux_setrlimit(l_uint resource, \
 				struct l_rlimit *rlim); }
 146	UNIMPL
 147	MNOPROTO { int setsid(void); }

==== //depot/projects/smpng/sys/alpha/osf1/osf1_misc.c#25 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/osf1/osf1_misc.c,v 1.44 2004/02/02 12:57:49 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/osf1/osf1_misc.c,v 1.45 2004/02/04 21:52:52 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -390,23 +390,25 @@
 	struct thread *td;
 	struct osf1_getrlimit_args *uap;
 {
-	struct __getrlimit_args /* {
-		syscallarg(u_int) which;
-		syscallarg(struct rlimit *) rlp;
-	} */ a;
+	struct rlimit bsd_rlim;
+	struct proc *p;
+	int which;
 
 	if (uap->which >= OSF1_RLIMIT_NLIMITS)
 		return (EINVAL);
 
 	if (uap->which <= OSF1_RLIMIT_LASTCOMMON)
-		a.which = uap->which;
+		which = uap->which;
 	else if (uap->which == OSF1_RLIMIT_NOFILE)
-		a.which = RLIMIT_NOFILE;
+		which = RLIMIT_NOFILE;
 	else
 		return (0);
-	a.rlp = (struct rlimit *)uap->rlp;
 
-	return getrlimit(td, &a);
+	p = td->td_proc;
+	PROC_LOCK(p);
+	lim_rlimit(p, which, &bsd_rlim);
+	PROC_UNLOCK(p);
+	return (copyout(&bsd_rlim, uap->rlp, sizeof(bsd_rlim)));
 }
 
 
@@ -415,23 +417,24 @@
 	struct thread *td;
 	struct osf1_setrlimit_args  *uap;
 {
-	struct __setrlimit_args /* {
-		syscallarg(u_int) which;
-		syscallarg(struct rlimit *) rlp;
-	} */ a;
+	struct rlimit bsd_rlim;
+	int error, which;
 
 	if (uap->which >= OSF1_RLIMIT_NLIMITS)
 		return (EINVAL);
 
 	if (uap->which <= OSF1_RLIMIT_LASTCOMMON)
-		a.which = uap->which;
+		which = uap->which;
 	else if (uap->which == OSF1_RLIMIT_NOFILE)
-		a.which = RLIMIT_NOFILE;
+		which = RLIMIT_NOFILE;
 	else
 		return (0);
-	a.rlp = (struct rlimit *)uap->rlp;
+
+	error = copyin(uap->rlp, &bsd_rlim, sizeof(bsd_rlim));
+	if (error)
+		return (error);
 
-	return setrlimit(td, &a);
+	return (kern_setrlimit(td, which, &bsd_rlim));
 }
 
 

==== //depot/projects/smpng/sys/alpha/osf1/osf1_proto.h#6 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/alpha/osf1/osf1_proto.h,v 1.8 2003/12/24 00:26:34 peter Exp $
- * created from;	FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.7 2003/12/24 00:26:09 peter Exp 
+ * $FreeBSD: src/sys/alpha/osf1/osf1_proto.h,v 1.9 2004/02/04 22:00:41 jhb Exp $
+ * created from;	FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.8 2004/02/04 21:57:00 jhb Exp 
  */
 
 #ifndef _OSF1_SYSPROTO_H_

==== //depot/projects/smpng/sys/alpha/osf1/osf1_syscall.h#5 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/alpha/osf1/osf1_syscall.h,v 1.7 2003/12/24 00:26:34 peter Exp $
- * created from;	FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.7 2003/12/24 00:26:09 peter Exp 
+ * $FreeBSD: src/sys/alpha/osf1/osf1_syscall.h,v 1.8 2004/02/04 22:00:41 jhb Exp $
+ * created from;	FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.8 2004/02/04 21:57:00 jhb Exp 
  */
 
 #define	OSF1_SYS_nosys	0

==== //depot/projects/smpng/sys/alpha/osf1/osf1_sysent.c#5 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/alpha/osf1/osf1_sysent.c,v 1.7 2003/12/24 00:26:34 peter Exp $
- * created from;	FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.7 2003/12/24 00:26:09 peter Exp 
+ * $FreeBSD: src/sys/alpha/osf1/osf1_sysent.c,v 1.8 2004/02/04 22:00:41 jhb Exp $
+ * created from;	FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.8 2004/02/04 21:57:00 jhb Exp 
  */
 
 #include "opt_compat.h"
@@ -162,8 +162,8 @@
 	{ AS(ogetpeername_args), (sy_call_t *)ogetpeername },	/* 141 = ogetpeername */
 	{ SYF_MPSAFE | 0, (sy_call_t *)ogethostid },	/* 142 = ogethostid */
 	{ SYF_MPSAFE | AS(osethostid_args), (sy_call_t *)osethostid },	/* 143 = osethostid */
-	{ AS(osf1_getrlimit_args), (sy_call_t *)osf1_getrlimit },	/* 144 = osf1_getrlimit */
-	{ AS(osf1_setrlimit_args), (sy_call_t *)osf1_setrlimit },	/* 145 = osf1_setrlimit */
+	{ SYF_MPSAFE | AS(osf1_getrlimit_args), (sy_call_t *)osf1_getrlimit },	/* 144 = osf1_getrlimit */
+	{ SYF_MPSAFE | AS(osf1_setrlimit_args), (sy_call_t *)osf1_setrlimit },	/* 145 = osf1_setrlimit */
 	{ 0, (sy_call_t *)nosys },			/* 146 = old killpg */
 	{ SYF_MPSAFE | 0, (sy_call_t *)setsid },	/* 147 = setsid */
 	{ 0, (sy_call_t *)nosys },			/* 148 = quotactl */

==== //depot/projects/smpng/sys/alpha/osf1/syscalls.master#5 (text+ko) ====

@@ -1,4 +1,4 @@
-;	$FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.7 2003/12/24 00:26:09 peter Exp $
+;	$FreeBSD: src/sys/alpha/osf1/syscalls.master,v 1.8 2004/02/04 21:57:00 jhb Exp $
 
 ;       @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 ; System call name/number master file (or rather, slave, from OSF1).
@@ -199,8 +199,8 @@
 141	NOPROTO	{ int ogetpeername(int fdes, caddr_t asa, int *alen); }
 142	MNOPROTO { int32_t ogethostid(void); }
 143	MNOPROTO { int osethostid(int32_t hostid); }
-144	STD	{ int osf1_getrlimit(u_int which, struct rlimit *rlp); }
-145	STD	{ int osf1_setrlimit(u_int which, struct rlimit *rlp); }
+144	MSTD	{ int osf1_getrlimit(u_int which, struct rlimit *rlp); }
+145	MSTD	{ int osf1_setrlimit(u_int which, struct rlimit *rlp); }
 146	UNIMPL	old killpg
 147	MNOPROTO { int setsid(void); }
 148	UNIMPL	quotactl

==== //depot/projects/smpng/sys/compat/ia32/ia32_sysvec.c#8 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ia32/ia32_sysvec.c,v 1.15 2003/12/23 02:42:38 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ia32/ia32_sysvec.c,v 1.16 2004/02/04 21:52:52 jhb Exp $");
 
 #include "opt_compat.h"
 
@@ -273,50 +273,33 @@
 ia32_fixlimits(struct image_params *imgp)
 {
 	struct proc *p = imgp->proc;
+	struct plimit *oldlim, *newlim;
 
+	if (ia32_maxdsiz == 0 && ia32_maxssiz == 0 && ia32_maxvmem == 0)
+		return;
+	newlim = lim_alloc();
+	PROC_LOCK(p);
+	oldlim = p->p_limit;
+	lim_copy(newlim, oldlim);
 	if (ia32_maxdsiz != 0) {
-		if (p->p_rlimit[RLIMIT_DATA].rlim_cur > ia32_maxdsiz ||
-		    p->p_rlimit[RLIMIT_DATA].rlim_max > ia32_maxdsiz) {
-			if (p->p_limit->p_refcnt > 1) {
-				p->p_limit->p_refcnt--;
-				p->p_limit = limcopy(p->p_limit);
-			}
-			if (p->p_rlimit[RLIMIT_DATA].rlim_cur > ia32_maxdsiz)
-				p->p_rlimit[RLIMIT_DATA].rlim_cur =
-				    ia32_maxdsiz;
-			if (p->p_rlimit[RLIMIT_DATA].rlim_max > ia32_maxdsiz)
-				p->p_rlimit[RLIMIT_DATA].rlim_max =
-				    ia32_maxdsiz;
-		}
+		if (newlim->pl_rlimit[RLIMIT_DATA].rlim_cur > ia32_maxdsiz)
+		    newlim->pl_rlimit[RLIMIT_DATA].rlim_cur = ia32_maxdsiz;
+		if (newlim->pl_rlimit[RLIMIT_DATA].rlim_max > ia32_maxdsiz)
+		    newlim->pl_rlimit[RLIMIT_DATA].rlim_max = ia32_maxdsiz;
 	}
 	if (ia32_maxssiz != 0) {
-		if (p->p_rlimit[RLIMIT_STACK].rlim_cur > ia32_maxssiz ||
-		    p->p_rlimit[RLIMIT_STACK].rlim_max > ia32_maxssiz) {
-			if (p->p_limit->p_refcnt > 1) {
-				p->p_limit->p_refcnt--;
-				p->p_limit = limcopy(p->p_limit);
-			}
-			if (p->p_rlimit[RLIMIT_STACK].rlim_cur > ia32_maxssiz)
-				p->p_rlimit[RLIMIT_STACK].rlim_cur =
-				    ia32_maxssiz;
-			if (p->p_rlimit[RLIMIT_STACK].rlim_max > ia32_maxssiz)
-				p->p_rlimit[RLIMIT_STACK].rlim_max =
-				    ia32_maxssiz;
-		}
+		if (newlim->pl_rlimit[RLIMIT_STACK].rlim_cur > ia32_maxssiz)
+		    newlim->pl_rlimit[RLIMIT_STACK].rlim_cur = ia32_maxssiz;
+		if (newlim->pl_rlimit[RLIMIT_STACK].rlim_max > ia32_maxssiz)
+		    newlim->pl_rlimit[RLIMIT_STACK].rlim_max = ia32_maxssiz;
 	}
 	if (ia32_maxvmem != 0) {
-		if (p->p_rlimit[RLIMIT_VMEM].rlim_cur > ia32_maxvmem ||
-		    p->p_rlimit[RLIMIT_VMEM].rlim_max > ia32_maxvmem) {
-			if (p->p_limit->p_refcnt > 1) {
-				p->p_limit->p_refcnt--;
-				p->p_limit = limcopy(p->p_limit);
-			}
-			if (p->p_rlimit[RLIMIT_VMEM].rlim_cur > ia32_maxvmem)
-				p->p_rlimit[RLIMIT_VMEM].rlim_cur =
-				    ia32_maxvmem;
-			if (p->p_rlimit[RLIMIT_VMEM].rlim_max > ia32_maxvmem)
-				p->p_rlimit[RLIMIT_VMEM].rlim_max =
-				    ia32_maxvmem;
-		}
+		if (newlim->pl_rlimit[RLIMIT_VMEM].rlim_cur > ia32_maxvmem)
+		    newlim->pl_rlimit[RLIMIT_VMEM].rlim_cur = ia32_maxvmem;
+		if (newlim->pl_rlimit[RLIMIT_VMEM].rlim_max > ia32_maxvmem)
+		    newlim->pl_rlimit[RLIMIT_VMEM].rlim_max = ia32_maxvmem;
 	}
+	p->p_limit = newlim;
+	PROC_UNLOCK(p);
+	lim_free(oldlim);
 }

==== //depot/projects/smpng/sys/compat/linux/linux_misc.c#45 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.151 2004/01/02 19:29:31 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.152 2004/02/04 21:52:53 jhb Exp $");
 
 #include "opt_mac.h"
 
@@ -378,20 +378,19 @@
 		goto cleanup;
 	}
 
-	/* To protect td->td_proc->p_rlimit in the if condition. */
-	mtx_assert(&Giant, MA_OWNED);
-
 	/*
 	 * text/data/bss must not exceed limits
 	 * XXX - this is not complete. it should check current usage PLUS
 	 * the resources needed by this library.
 	 */
+	PROC_LOCK(td->td_proc);
 	if (a_out->a_text > maxtsiz ||
-	    a_out->a_data + bss_size >
-	    td->td_proc->p_rlimit[RLIMIT_DATA].rlim_cur) {
+	    a_out->a_data + bss_size > lim_cur(td->td_proc, RLIMIT_DATA)) {
+		PROC_UNLOCK(td->td_proc);
 		error = ENOMEM;
 		goto cleanup;
 	}
+	PROC_UNLOCK(td->td_proc);
 
 	mp_fixme("Unlocked vflags access.");
 	/* prevent more writers */
@@ -1111,7 +1110,7 @@
 
 	bsd_rlim.rlim_cur = (rlim_t)rlim.rlim_cur;
 	bsd_rlim.rlim_max = (rlim_t)rlim.rlim_max;
-	return (dosetrlimit(td, which, &bsd_rlim));
+	return (kern_setrlimit(td, which, &bsd_rlim));
 }
 
 int
@@ -1119,7 +1118,7 @@
 {
 	struct l_rlimit rlim;
 	struct proc *p = td->td_proc;
-	struct rlimit *bsd_rlp;
+	struct rlimit bsd_rlim;
 	u_int which;
 
 #ifdef DEBUG
@@ -1134,12 +1133,15 @@
 	which = linux_to_bsd_resource[args->resource];
 	if (which == -1)
 		return (EINVAL);
-	bsd_rlp = &p->p_rlimit[which];
+
+	PROC_LOCK(p);
+	lim_rlimit(p, which, &bsd_rlim);
+	PROC_UNLOCK(p);
 
-	rlim.rlim_cur = (unsigned long)bsd_rlp->rlim_cur;
+	rlim.rlim_cur = (unsigned long)bsd_rlim.rlim_cur;
 	if (rlim.rlim_cur == ULONG_MAX)
 		rlim.rlim_cur = LONG_MAX;
-	rlim.rlim_max = (unsigned long)bsd_rlp->rlim_max;
+	rlim.rlim_max = (unsigned long)bsd_rlim.rlim_max;
 	if (rlim.rlim_max == ULONG_MAX)
 		rlim.rlim_max = LONG_MAX;
 	return (copyout(&rlim, args->rlim, sizeof(rlim)));
@@ -1150,7 +1152,7 @@
 {
 	struct l_rlimit rlim;
 	struct proc *p = td->td_proc;
-	struct rlimit *bsd_rlp;
+	struct rlimit bsd_rlim;
 	u_int which;
 
 #ifdef DEBUG
@@ -1165,10 +1167,13 @@
 	which = linux_to_bsd_resource[args->resource];
 	if (which == -1)
 		return (EINVAL);
-	bsd_rlp = &p->p_rlimit[which];
+
+	PROC_LOCK(p);
+	lim_rlimit(p, which, &bsd_rlim);
+	PROC_UNLOCK(p);
 
-	rlim.rlim_cur = (l_ulong)bsd_rlp->rlim_cur;
-	rlim.rlim_max = (l_ulong)bsd_rlp->rlim_max;
+	rlim.rlim_cur = (l_ulong)bsd_rlim.rlim_cur;
+	rlim.rlim_max = (l_ulong)bsd_rlim.rlim_max;
 	return (copyout(&rlim, args->rlim, sizeof(rlim)));
 }
 #endif /*!__alpha__*/

==== //depot/projects/smpng/sys/compat/ndis/subr_ndis.c#8 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ndis.c,v 1.41 2004/02/03 07:39:23 wpaul Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ndis.c,v 1.42 2004/02/04 04:44:16 wpaul Exp $");
 
 /*
  * This file implements a translation layer between the BSD networking
@@ -171,7 +171,8 @@
 static void ndis_mapshared_cb(void *, bus_dma_segment_t *, int, int);
 __stdcall static void ndis_alloc_sharedmem(ndis_handle, uint32_t,
 	uint8_t, void **, ndis_physaddr *);
-__stdcall static void ndis_alloc_sharedmem_async(ndis_handle,
+static void ndis_asyncmem_complete(void *);
+__stdcall static ndis_status ndis_alloc_sharedmem_async(ndis_handle,
 	uint32_t, uint8_t, void *);
 __stdcall static void ndis_free_sharedmem(ndis_handle, uint32_t,
 	uint8_t, void *, ndis_physaddr);
@@ -1319,32 +1320,68 @@
 	return;
 }
 
-__stdcall static void
-ndis_alloc_sharedmem_async(adapter, len, cached, ctx)
-	ndis_handle		adapter;
-	uint32_t		len;
-	uint8_t			cached;
-	void			*ctx;
+struct ndis_allocwork {
+	ndis_handle		na_adapter;
+	uint32_t		na_len;
+	uint8_t			na_cached;
+	void			*na_ctx;
+};
+
+static void
+ndis_asyncmem_complete(arg)
+	void			*arg;
 {
 	ndis_miniport_block	*block;
 	struct ndis_softc	*sc;
+	struct ndis_allocwork	*w;
 	void			*vaddr;
 	ndis_physaddr		paddr;
 	__stdcall ndis_allocdone_handler	donefunc;
 
-	if (adapter == NULL)
-		return;
+	w = arg;
+	block = (ndis_miniport_block *)w->na_adapter;
+	sc = (struct ndis_softc *)(block->nmb_ifp);
+
+	vaddr = NULL;
+	paddr.np_quad = 0;
 
-	block = (ndis_miniport_block *)adapter;
-	sc = (struct ndis_softc *)(block->nmb_ifp);
 	donefunc = sc->ndis_chars.nmc_allocate_complete_func;
+	ndis_alloc_sharedmem(w->na_adapter, w->na_len,
+	    w->na_cached, &vaddr, &paddr);
+	donefunc(w->na_adapter, vaddr, &paddr, w->na_len, w->na_ctx);
 
-	ndis_alloc_sharedmem(adapter, len, cached, &vaddr, &paddr);
-	donefunc(adapter, vaddr, &paddr, len, ctx);
+	free(arg, M_TEMP);
 
 	return;
 }
 
+__stdcall static ndis_status
+ndis_alloc_sharedmem_async(adapter, len, cached, ctx)
+	ndis_handle		adapter;
+	uint32_t		len;
+	uint8_t			cached;
+	void			*ctx;
+{
+	struct ndis_allocwork	*w;
+
+	if (adapter == NULL)
+		return(NDIS_STATUS_FAILURE);
+
+	w = malloc(sizeof(struct ndis_allocwork), M_TEMP, M_NOWAIT);
+
+	if (w == NULL)
+		return(NDIS_STATUS_FAILURE);
+
+	w->na_adapter = adapter;
+	w->na_cached = cached;
+	w->na_len = len;
+	w->na_ctx = ctx;
+
+	ndis_sched(ndis_asyncmem_complete, w, NDIS_TASKQUEUE);
+
+	return(NDIS_STATUS_PENDING);
+}
+
 __stdcall static void
 ndis_free_sharedmem(adapter, len, cached, vaddr, paddr)
 	ndis_handle		adapter;

==== //depot/projects/smpng/sys/compat/svr4/imgact_svr4.c#10 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/imgact_svr4.c,v 1.21 2003/06/10 21:35:15 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/imgact_svr4.c,v 1.22 2004/02/04 21:52:53 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -104,14 +104,16 @@
     /* text + data can't exceed file size */
     if (a_out->a_data + a_out->a_text > imgp->attr->va_size)
 	return (EFAULT);
-    /* For p_rlimit below. */
-    mtx_assert(&Giant, MA_OWNED);
     /*
      * text/data/bss must not exceed limits
      */
+    PROC_LOCK(imgp->proc);
     if (a_out->a_text > maxtsiz ||
-	a_out->a_data + bss_size > imgp->proc->p_rlimit[RLIMIT_DATA].rlim_cur)
+	a_out->a_data + bss_size > lim_cur(imgp->proc, RLIMIT_DATA)) {
+    	PROC_UNLOCK(imgp->proc);
 	return (ENOMEM);
+    }
+    PROC_UNLOCK(imgp->proc);
 
     VOP_UNLOCK(imgp->vp, 0, td);
 

==== //depot/projects/smpng/sys/compat/svr4/svr4_filio.c#14 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_filio.c,v 1.30 2003/10/20 10:38:48 tjr Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_filio.c,v 1.31 2004/02/04 21:52:53 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -66,10 +66,13 @@
      int idx = 0, cerr;
      u_long siz;
 
-	mtx_assert(&Giant, MA_OWNED);
-	if (uap->nfds > td->td_proc->p_rlimit[RLIMIT_NOFILE].rlim_cur &&
-	    uap->nfds > FD_SETSIZE)
-		return (EINVAL);
+     PROC_LOCK(td->td_proc);
+     if (uap->nfds > lim_cur(td->td_proc, RLIMIT_NOFILE) &&
+       uap->nfds > FD_SETSIZE) {
+       PROC_UNLOCK(td->td_proc);
+       return (EINVAL);
+     }
+     PROC_UNLOCK(td->td_proc);
 
      pa.fds = uap->fds;
      pa.nfds = uap->nfds;

==== //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#30 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.69 2004/01/21 17:10:47 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.70 2004/02/04 21:52:53 jhb Exp $");
 
 #include "opt_mac.h"
 
@@ -820,15 +820,15 @@
 	base = round_page((vm_offset_t) vm->vm_daddr);
 	ns = (vm_offset_t)uap->nsize;
 	new = round_page(ns);
-	/* For p_rlimit. */
-	mtx_assert(&Giant, MA_OWNED);
 	if (new > base) {
-	  if ((new - base) > (unsigned) td->td_proc->p_rlimit[RLIMIT_DATA].rlim_cur) {
+		PROC_LOCK(p);
+		if ((new - base) > (unsigned)lim_cur(p, RLIMIT_DATA)) {
+			PROC_UNLOCK(p);
 			return ENOMEM;
-	  }
-	  if (new >= VM_MAXUSER_ADDRESS) {
-	    return (ENOMEM);
-	  }
+		}
+		PROC_UNLOCK(p);
+		if (new >= VM_MAXUSER_ADDRESS)
+			return (ENOMEM);
 	} else if (new < base) {
 		/*
 		 * This is simply an invalid value.  If someone wants to
@@ -843,8 +843,12 @@
 	if (new > old) {
 		vm_size_t diff;
 		diff = new - old;
-		if (vm->vm_map.size + diff > p->p_rlimit[RLIMIT_VMEM].rlim_cur)
+		PROC_LOCK(p);
+		if (vm->vm_map.size + diff > lim_cur(p, RLIMIT_VMEM)) {
+			PROC_UNLOCK(p);
 			return(ENOMEM);
+		}
+		PROC_UNLOCK(p);
 		rv = vm_map_find(&vm->vm_map, NULL, 0, &old, diff, FALSE,
 			VM_PROT_ALL, VM_PROT_ALL, 0);
 		if (rv != KERN_SUCCESS) {
@@ -922,42 +926,33 @@
 	struct svr4_sys_ulimit_args *uap;
 {
         int *retval = td->td_retval;
+	int error;
 
 	switch (uap->cmd) {
 	case SVR4_GFILLIM:
-		/* For p_rlimit below. */
-		mtx_assert(&Giant, MA_OWNED);
-		*retval = td->td_proc->p_rlimit[RLIMIT_FSIZE].rlim_cur / 512;
+		PROC_LOCK(td->td_proc);
+		*retval = lim_cur(td->td_proc, RLIMIT_FSIZE) / 512;
+		PROC_UNLOCK(td->td_proc);
 		if (*retval == -1)
 			*retval = 0x7fffffff;
 		return 0;
 
 	case SVR4_SFILLIM:
 		{
-			int error;
-			struct __setrlimit_args srl;
 			struct rlimit krl;
-			caddr_t sg = stackgap_init();
-			struct rlimit *url = (struct rlimit *) 
-				stackgap_alloc(&sg, sizeof *url);
 
 			krl.rlim_cur = uap->newlimit * 512;
-			mtx_assert(&Giant, MA_OWNED);
-			krl.rlim_max = td->td_proc->p_rlimit[RLIMIT_FSIZE].rlim_max;
+			PROC_LOCK(td->td_proc);
+			krl.rlim_max = lim_max(td->td_proc, RLIMIT_FSIZE);
+			PROC_UNLOCK(td->td_proc);
 
-			error = copyout(&krl, url, sizeof(*url));
+			error = kern_setrlimit(td, RLIMIT_FSIZE, &krl);
 			if (error)
 				return error;
 
-			srl.which = RLIMIT_FSIZE;
-			srl.rlp = url;
-
-			error = setrlimit(td, &srl);
-			if (error)
-				return error;
-
-			mtx_assert(&Giant, MA_OWNED);
-			*retval = td->td_proc->p_rlimit[RLIMIT_FSIZE].rlim_cur;
+			PROC_LOCK(td->td_proc);
+			*retval = lim_cur(td->td_proc, RLIMIT_FSIZE);
+			PROC_UNLOCK(td->td_proc);
 			if (*retval == -1)
 				*retval = 0x7fffffff;
 			return 0;
@@ -968,12 +963,15 @@
 			struct vmspace *vm = td->td_proc->p_vmspace;
 			register_t r;
 
-			mtx_assert(&Giant, MA_OWNED);
-			r = td->td_proc->p_rlimit[RLIMIT_DATA].rlim_cur;
+			PROC_LOCK(td->td_proc);
+			r = lim_cur(td->td_proc, RLIMIT_DATA);
+			PROC_UNLOCK(td->td_proc);
 
 			if (r == -1)
 				r = 0x7fffffff;
+			mtx_lock(&Giant);	/* XXX */
 			r += (long) vm->vm_daddr;
+			mtx_unlock(&Giant);
 			if (r < 0)
 				r = 0x7fffffff;
 			*retval = r;
@@ -981,8 +979,9 @@
 		}
 
 	case SVR4_GDESLIM:
-		mtx_assert(&Giant, MA_OWNED);
-		*retval = td->td_proc->p_rlimit[RLIMIT_NOFILE].rlim_cur;
+		PROC_LOCK(td->td_proc);
+		*retval = lim_cur(td->td_proc, RLIMIT_NOFILE);
+		PROC_UNLOCK(td->td_proc);
 		if (*retval == -1)
 			*retval = 0x7fffffff;
 		return 0;

==== //depot/projects/smpng/sys/compat/svr4/svr4_proto.h#5 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/svr4/svr4_proto.h,v 1.13 2003/12/24 00:02:08 peter Exp $
- * created from FreeBSD: src/sys/compat/svr4/syscalls.master,v 1.13 2003/12/24 00:00:47 peter Exp 
+ * $FreeBSD: src/sys/compat/svr4/svr4_proto.h,v 1.14 2004/02/04 22:00:41 jhb Exp $
+ * created from FreeBSD: src/sys/compat/svr4/syscalls.master,v 1.14 2004/02/04 21:57:00 jhb Exp 
  */
 
 #ifndef _SVR4_SYSPROTO_H_

==== //depot/projects/smpng/sys/compat/svr4/svr4_resource.c#9 (text+ko) ====

@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_resource.c,v 1.15 2003/06/10 21:35:15 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_resource.c,v 1.16 2004/02/04 21:52:53 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -136,9 +136,9 @@
 	if (rl == -1)
 		return EINVAL;
 
-	/* For p_rlimit. */
-	mtx_assert(&Giant, MA_OWNED);
-	blim = td->td_proc->p_rlimit[rl];
+	PROC_LOCK(td->td_proc);
+	lim_rlimit(td->td_proc, rl, &blim);
+	PROC_UNLOCK(td->td_proc);
 
 	/*
 	 * Our infinity, is their maxfiles.
@@ -177,20 +177,20 @@
 	struct svr4_sys_setrlimit_args *uap;
 {
 	int rl = svr4_to_native_rl(uap->which);
-	struct rlimit blim, *limp;
+	struct rlimit blim, curlim;
 	struct svr4_rlimit slim;
 	int error;
 
 	if (rl == -1)
 		return EINVAL;
 
-	/* For p_rlimit. */
-	mtx_assert(&Giant, MA_OWNED);
-	limp = &td->td_proc->p_rlimit[rl];
-
 	if ((error = copyin(uap->rlp, &slim, sizeof(slim))) != 0)
 		return error;
 
+	PROC_LOCK(td->td_proc);
+	lim_rlimit(td->td_proc, rl, &curlim);
+	PROC_UNLOCK(td->td_proc);
+
 	/*
 	 * if the limit is SVR4_RLIM_INFINITY, then we set it to our
 	 * unlimited.
@@ -205,20 +205,20 @@
 	else if (OKLIMIT(slim.rlim_max))
 		blim.rlim_max = (rlim_t) slim.rlim_max;
 	else if (slim.rlim_max == SVR4_RLIM_SAVED_MAX)
-		blim.rlim_max = limp->rlim_max;
+		blim.rlim_max = curlim.rlim_max;
 	else if (slim.rlim_max == SVR4_RLIM_SAVED_CUR)
-		blim.rlim_max = limp->rlim_cur;
+		blim.rlim_max = curlim.rlim_cur;
 
 	if (slim.rlim_cur == SVR4_RLIM_INFINITY)
 		blim.rlim_cur = RLIM_INFINITY;
 	else if (OKLIMIT(slim.rlim_cur))
 		blim.rlim_cur = (rlim_t) slim.rlim_cur;
 	else if (slim.rlim_cur == SVR4_RLIM_SAVED_MAX)
-		blim.rlim_cur = limp->rlim_max;
+		blim.rlim_cur = curlim.rlim_max;
 	else if (slim.rlim_cur == SVR4_RLIM_SAVED_CUR)
-		blim.rlim_cur = limp->rlim_cur;
+		blim.rlim_cur = curlim.rlim_cur;
 
-	return dosetrlimit(td, rl, &blim);
+	return (kern_setrlimit(td, rl, &blim));
 }
 
 
@@ -234,9 +234,9 @@
 	if (rl == -1)
 		return EINVAL;
 
-	/* For p_rlimit. */
-	mtx_assert(&Giant, MA_OWNED);
-	blim = td->td_proc->p_rlimit[rl];
+	PROC_LOCK(td->td_proc);
+	lim_rlimit(td->td_proc, rl, &blim);
+	PROC_UNLOCK(td->td_proc);
 
 	/*
 	 * Our infinity, is their maxfiles.
@@ -275,20 +275,20 @@
 	struct svr4_sys_setrlimit64_args *uap;
 {
 	int rl = svr4_to_native_rl(uap->which);
-	struct rlimit blim, *limp;
+	struct rlimit blim, curlim;
 	struct svr4_rlimit64 slim;
 	int error;
 
 	if (rl == -1)
 		return EINVAL;
 
-	/* For p_rlimit. */
-	mtx_assert(&Giant, MA_OWNED);
-	limp = &td->td_proc->p_rlimit[rl];
-
 	if ((error = copyin(uap->rlp, &slim, sizeof(slim))) != 0)
 		return error;
 

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200402042221.i14MLpRi081178>