From owner-p4-projects@FreeBSD.ORG Wed Feb 4 14:22:00 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4674D16A4D0; Wed, 4 Feb 2004 14:21:59 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1AAB916A4CE for ; Wed, 4 Feb 2004 14:21:59 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9C15843D31 for ; Wed, 4 Feb 2004 14:21:52 -0800 (PST) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i14MLq0B081201 for ; Wed, 4 Feb 2004 14:21:52 -0800 (PST) (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i14MLpRi081178 for perforce@freebsd.org; Wed, 4 Feb 2004 14:21:51 -0800 (PST) (envelope-from jhb@freebsd.org) Date: Wed, 4 Feb 2004 14:21:51 -0800 (PST) Message-Id: <200402042221.i14MLpRi081178@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Subject: PERFORCE change 46502 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Feb 2004 22:22:00 -0000 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 -__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 #include @@ -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 -__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 #include @@ -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 -__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 -__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 -__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 -__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 #include @@ -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 -__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 #include @@ -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 -__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 -__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 #include @@ -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) <<<