Module Name: src
Committed By: snj
Date: Wed Apr 1 00:25:23 UTC 2009
Modified Files:
src/bin/csh [netbsd-5]: csh.1 func.c
src/bin/ps [netbsd-5]: print.c ps.c
src/bin/sh [netbsd-5]: miscbltin.c sh.1
src/external/bsd/top/dist/machine [netbsd-5]: m_netbsd.c
src/lib/libkvm [netbsd-5]: kvm_proc.c
src/sys/arch/mips/mips [netbsd-5]: cpu_exec.c
src/sys/compat/darwin [netbsd-5]: darwin_exec.c
src/sys/compat/ibcs2 [netbsd-5]: ibcs2_exec.c
src/sys/compat/irix [netbsd-5]: irix_resource.c
src/sys/compat/linux/arch/amd64 [netbsd-5]: linux_exec_machdep.c
src/sys/compat/linux/arch/i386 [netbsd-5]: linux_exec_machdep.c
src/sys/compat/linux/common [netbsd-5]: linux_limit.h
src/sys/compat/osf1 [netbsd-5]: osf1_resource.c
src/sys/compat/svr4 [netbsd-5]: svr4_resource.c
src/sys/compat/svr4_32 [netbsd-5]: svr4_32_resource.c
src/sys/kern [netbsd-5]: exec_subr.c init_sysctl.c kern_exec.c
kern_resource.c
src/sys/sys [netbsd-5]: param.h resource.h sysctl.h
src/sys/uvm [netbsd-5]: uvm_extern.h uvm_glue.c uvm_mmap.c
src/usr.bin/systat [netbsd-5]: ps.c
Log Message:
Pull up following revision(s) (requested by mrg in ticket #622):
bin/csh/csh.1: revision 1.46
bin/csh/func.c: revision 1.37
bin/ps/print.c: revision 1.111
bin/ps/ps.c: revision 1.74
bin/sh/miscbltin.c: revision 1.38
bin/sh/sh.1: revision 1.92 via patch
external/bsd/top/dist/machine/m_netbsd.c: revision 1.7
lib/libkvm/kvm_proc.c: revision 1.82
sys/arch/mips/mips/cpu_exec.c: revision 1.55
sys/compat/darwin/darwin_exec.c: revision 1.57
sys/compat/ibcs2/ibcs2_exec.c: revision 1.73
sys/compat/irix/irix_resource.c: revision 1.15
sys/compat/linux/arch/amd64/linux_exec_machdep.c: revision 1.16
sys/compat/linux/arch/i386/linux_exec_machdep.c: revision 1.12
sys/compat/linux/common/linux_limit.h: revision 1.5
sys/compat/osf1/osf1_resource.c: revision 1.14
sys/compat/svr4/svr4_resource.c: revision 1.18
sys/compat/svr4_32/svr4_32_resource.c: revision 1.17
sys/kern/exec_subr.c: revision 1.62
sys/kern/init_sysctl.c: revision 1.160
sys/kern/kern_exec.c: revision 1.288
sys/kern/kern_resource.c: revision 1.151
sys/sys/param.h: patch
sys/sys/resource.h: revision 1.31
sys/sys/sysctl.h: revision 1.184
sys/uvm/uvm_extern.h: revision 1.153
sys/uvm/uvm_glue.c: revision 1.136
sys/uvm/uvm_mmap.c: revision 1.128
usr.bin/systat/ps.c: revision 1.32
- - add new RLIMIT_AS (aka RLIMIT_VMEM) resource that limits the total
address space available to processes. this limit exists in most other
modern unix variants, and like most of them, our defaults are unlimited.
remove the old mmap / rlimit.datasize hack.
- - adds the VMCMD_STACK flag to all the stack-creation vmcmd callers.
it is currently unused, but was added a few years ago.
- - add a pair of new process size values to kinfo_proc2{}. one is the
total size of the process memory map, and the other is the total size
adjusted for unused stack space (since most processes have a lot of
this...)
- - patch sh, and csh to notice RLIMIT_AS. (in some cases, the alias
RLIMIT_VMEM was already present and used if availble.)
- - patch ps, top and systat to notice the new k_vm_vsize member of
kinfo_proc2{}.
- - update irix, svr4, svr4_32, linux and osf1 emulations to support
this information. (freebsd could be done, but that it's best left
as part of the full-update of compat/freebsd.)
this addresses PR 7897. it also gives correct memory usage values,
which have never been entirely correct (since mmap), and have been
very incorrect since jemalloc() was enabled.
tested on i386 and sparc64, build tested on several other platforms.
thanks to many folks for feedback and testing but most espcially
chuq and yamt for critical suggestions that lead to this patch not
having a special ugliness i wasn't happy with anyway :-)
To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.43.32.1 src/bin/csh/csh.1
cvs rdiff -u -r1.36 -r1.36.12.1 src/bin/csh/func.c
cvs rdiff -u -r1.106 -r1.106.2.1 src/bin/ps/print.c
cvs rdiff -u -r1.71 -r1.71.4.1 src/bin/ps/ps.c
cvs rdiff -u -r1.36 -r1.36.26.1 src/bin/sh/miscbltin.c
cvs rdiff -u -r1.87 -r1.87.18.1 src/bin/sh/sh.1
cvs rdiff -u -r1.5 -r1.5.8.1 src/external/bsd/top/dist/machine/m_netbsd.c
cvs rdiff -u -r1.78.6.1 -r1.78.6.2 src/lib/libkvm/kvm_proc.c
cvs rdiff -u -r1.50 -r1.50.54.1 src/sys/arch/mips/mips/cpu_exec.c
cvs rdiff -u -r1.55 -r1.55.4.1 src/sys/compat/darwin/darwin_exec.c
cvs rdiff -u -r1.71 -r1.71.4.1 src/sys/compat/ibcs2/ibcs2_exec.c
cvs rdiff -u -r1.14 -r1.14.10.1 src/sys/compat/irix/irix_resource.c
cvs rdiff -u -r1.13 -r1.13.2.1 \
src/sys/compat/linux/arch/amd64/linux_exec_machdep.c
cvs rdiff -u -r1.11 -r1.11.4.1 \
src/sys/compat/linux/arch/i386/linux_exec_machdep.c
cvs rdiff -u -r1.3 -r1.3.10.1 src/sys/compat/linux/common/linux_limit.h
cvs rdiff -u -r1.13 -r1.13.12.1 src/sys/compat/osf1/osf1_resource.c
cvs rdiff -u -r1.16 -r1.16.10.1 src/sys/compat/svr4/svr4_resource.c
cvs rdiff -u -r1.15 -r1.15.10.1 src/sys/compat/svr4_32/svr4_32_resource.c
cvs rdiff -u -r1.61 -r1.61.8.1 src/sys/kern/exec_subr.c
cvs rdiff -u -r1.149.4.3 -r1.149.4.4 src/sys/kern/init_sysctl.c
cvs rdiff -u -r1.280.4.1 -r1.280.4.2 src/sys/kern/kern_exec.c
cvs rdiff -u -r1.147 -r1.147.4.1 src/sys/kern/kern_resource.c
cvs rdiff -u -r1.330.4.5 -r1.330.4.6 src/sys/sys/param.h
cvs rdiff -u -r1.29 -r1.29.72.1 src/sys/sys/resource.h
cvs rdiff -u -r1.177 -r1.177.4.1 src/sys/sys/sysctl.h
cvs rdiff -u -r1.148.4.1 -r1.148.4.2 src/sys/uvm/uvm_extern.h
cvs rdiff -u -r1.133 -r1.133.6.1 src/sys/uvm/uvm_glue.c
cvs rdiff -u -r1.126 -r1.126.8.1 src/sys/uvm/uvm_mmap.c
cvs rdiff -u -r1.30 -r1.30.18.1 src/usr.bin/systat/ps.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/bin/csh/csh.1
diff -u src/bin/csh/csh.1:1.43 src/bin/csh/csh.1:1.43.32.1
--- src/bin/csh/csh.1:1.43 Tue Apr 20 01:43:03 2004
+++ src/bin/csh/csh.1 Wed Apr 1 00:25:20 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: csh.1,v 1.43 2004/04/20 01:43:03 jschauma Exp $
+.\" $NetBSD: csh.1,v 1.43.32.1 2009/04/01 00:25:20 snj Exp $
.\"
.\" Copyright (c) 1980, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -1431,6 +1431,8 @@
The maximum number of simultaneous open files for this user id.
.It Ar sbsize
The maximum socket buffer size of a process (in bytes).
+.It Ar vmemoryuse
+The maximum size (in bytes) which a process can obtain.
.El
.Pp
The
Index: src/bin/csh/func.c
diff -u src/bin/csh/func.c:1.36 src/bin/csh/func.c:1.36.12.1
--- src/bin/csh/func.c:1.36 Sat Sep 15 14:33:05 2007
+++ src/bin/csh/func.c Wed Apr 1 00:25:20 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: func.c,v 1.36 2007/09/15 14:33:05 ragge Exp $ */
+/* $NetBSD: func.c,v 1.36.12.1 2009/04/01 00:25:20 snj Exp $ */
/*-
* Copyright (c) 1980, 1991, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)func.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: func.c,v 1.36 2007/09/15 14:33:05 ragge Exp $");
+__RCSID("$NetBSD: func.c,v 1.36.12.1 2009/04/01 00:25:20 snj Exp $");
#endif
#endif /* not lint */
@@ -1106,6 +1106,7 @@
{ RLIMIT_NPROC, "maxproc", 1, "" },
{ RLIMIT_NOFILE, "openfiles", 1, "" },
{ RLIMIT_SBSIZE, "sbsize", 1, "bytes" },
+ { RLIMIT_AS, "vmemoryuse", 1024, "kbytes" },
{ -1, NULL, 0, NULL }
};
Index: src/bin/ps/print.c
diff -u src/bin/ps/print.c:1.106 src/bin/ps/print.c:1.106.2.1
--- src/bin/ps/print.c:1.106 Sun Oct 19 02:39:08 2008
+++ src/bin/ps/print.c Wed Apr 1 00:25:20 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: print.c,v 1.106 2008/10/19 02:39:08 christos Exp $ */
+/* $NetBSD: print.c,v 1.106.2.1 2009/04/01 00:25:20 snj Exp $ */
/*
* Copyright (c) 2000, 2007 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
#if 0
static char sccsid[] = "@(#)print.c 8.6 (Berkeley) 4/16/94";
#else
-__RCSID("$NetBSD: print.c,v 1.106 2008/10/19 02:39:08 christos Exp $");
+__RCSID("$NetBSD: print.c,v 1.106.2.1 2009/04/01 00:25:20 snj Exp $");
#endif
#endif /* not lint */
@@ -977,8 +977,7 @@
k = arg;
v = ve->var;
- intprintorsetwidth(v,
- pgtok(k->p_vm_dsize + k->p_vm_ssize + k->p_vm_tsize), mode);
+ intprintorsetwidth(v, pgtok(k->p_vm_msize), mode);
}
void
Index: src/bin/ps/ps.c
diff -u src/bin/ps/ps.c:1.71 src/bin/ps/ps.c:1.71.4.1
--- src/bin/ps/ps.c:1.71 Fri Sep 26 13:02:42 2008
+++ src/bin/ps/ps.c Wed Apr 1 00:25:20 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ps.c,v 1.71 2008/09/26 13:02:42 wiz Exp $ */
+/* $NetBSD: ps.c,v 1.71.4.1 2009/04/01 00:25:20 snj Exp $ */
/*
* Copyright (c) 2000-2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
#if 0
static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94";
#else
-__RCSID("$NetBSD: ps.c,v 1.71 2008/09/26 13:02:42 wiz Exp $");
+__RCSID("$NetBSD: ps.c,v 1.71.4.1 2009/04/01 00:25:20 snj Exp $");
#endif
#endif /* not lint */
@@ -584,7 +584,7 @@
struct varent *ve;
const sigset_t *sa, *sb;
-#define V_SIZE(k) (k->p_vm_dsize + k->p_vm_ssize + k->p_vm_tsize)
+#define V_SIZE(k) ((k)->p_vm_msize)
#define RDIFF_N(t, n) \
if (((const t *)((const char *)ka + v->off))[n] > ((const t *)((const char *)kb + v->off))[n]) \
return 1; \
Index: src/bin/sh/miscbltin.c
diff -u src/bin/sh/miscbltin.c:1.36 src/bin/sh/miscbltin.c:1.36.26.1
--- src/bin/sh/miscbltin.c:1.36 Sat Oct 1 20:23:54 2005
+++ src/bin/sh/miscbltin.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: miscbltin.c,v 1.36 2005/10/01 20:23:54 christos Exp $ */
+/* $NetBSD: miscbltin.c,v 1.36.26.1 2009/04/01 00:25:21 snj Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)miscbltin.c 8.4 (Berkeley) 5/4/95";
#else
-__RCSID("$NetBSD: miscbltin.c,v 1.36 2005/10/01 20:23:54 christos Exp $");
+__RCSID("$NetBSD: miscbltin.c,v 1.36.26.1 2009/04/01 00:25:21 snj Exp $");
#endif
#endif /* not lint */
@@ -360,7 +360,7 @@
struct rlimit limit;
what = 'f';
- while ((optc = nextopt("HSabtfdsmcnpl")) != '\0')
+ while ((optc = nextopt("HSabtfdsmcnplv")) != '\0')
switch (optc) {
case 'H':
how = HARD;
Index: src/bin/sh/sh.1
diff -u src/bin/sh/sh.1:1.87 src/bin/sh/sh.1:1.87.18.1
--- src/bin/sh/sh.1:1.87 Sun Jun 24 17:57:56 2007
+++ src/bin/sh/sh.1 Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: sh.1,v 1.87 2007/06/24 17:57:56 christos Exp $
+.\" $NetBSD: sh.1,v 1.87.18.1 2009/04/01 00:25:21 snj Exp $
.\" Copyright (c) 1991, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
@@ -1726,7 +1726,7 @@
command is printed.
.It ulimit Xo
.Op Fl H \*(Ba Fl S
-.Op Fl a \*(Ba Fl tfdscmlpn Op Ar value
+.Op Fl a \*(Ba Fl tfdscmlpnv Op Ar value
.Xc
Inquire about or set the hard or soft limits on processes or set new
limits.
@@ -1778,6 +1778,8 @@
have at one time
.It Fl n
show or set the limit on the number of files a process can have open at once
+.It Fl v
+show or set the limit on how large a process address space can be
.El
.Pp
If none of these is specified, it is the limit on file size that is shown
Index: src/external/bsd/top/dist/machine/m_netbsd.c
diff -u src/external/bsd/top/dist/machine/m_netbsd.c:1.5 src/external/bsd/top/dist/machine/m_netbsd.c:1.5.8.1
--- src/external/bsd/top/dist/machine/m_netbsd.c:1.5 Sat Aug 2 23:20:16 2008
+++ src/external/bsd/top/dist/machine/m_netbsd.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: m_netbsd.c,v 1.5 2008/08/02 23:20:16 cube Exp $ */
+/* $NetBSD: m_netbsd.c,v 1.5.8.1 2009/04/01 00:25:21 snj Exp $ */
/*
* top - a top users display for Unix
@@ -37,12 +37,12 @@
* Andrew Doran <[email protected]>
*
*
- * $Id: m_netbsd.c,v 1.5 2008/08/02 23:20:16 cube Exp $
+ * $Id: m_netbsd.c,v 1.5.8.1 2009/04/01 00:25:21 snj Exp $
*/
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: m_netbsd.c,v 1.5 2008/08/02 23:20:16 cube Exp $");
+__RCSID("$NetBSD: m_netbsd.c,v 1.5.8.1 2009/04/01 00:25:21 snj Exp $");
#endif
#include <sys/param.h>
@@ -87,8 +87,14 @@
((pct) / (1.0 - exp((pp)->pfx ## swtime * logcpu))))
/* what we consider to be process size: */
+/* NetBSD introduced p_vm_msize with RLIMIT_AS */
+#ifdef RLIMIT_AS
#define PROCSIZE(pp) \
- ((pp)->p_vm_tsize + (pp)->p_vm_dsize + (pp)->p_vm_ssize)
+ ((pp)->p_vm_msize)
+#else
+#define PROCSIZE(pp) \
+ ((pp)->p_vm_tsize + (pp)->p_vm_dsize + (pp)->p_vm_ssize)
+#endif
/*
Index: src/lib/libkvm/kvm_proc.c
diff -u src/lib/libkvm/kvm_proc.c:1.78.6.1 src/lib/libkvm/kvm_proc.c:1.78.6.2
--- src/lib/libkvm/kvm_proc.c:1.78.6.1 Sat Nov 29 21:00:00 2008
+++ src/lib/libkvm/kvm_proc.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kvm_proc.c,v 1.78.6.1 2008/11/29 21:00:00 bouyer Exp $ */
+/* $NetBSD: kvm_proc.c,v 1.78.6.2 2009/04/01 00:25:21 snj Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
#if 0
static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93";
#else
-__RCSID("$NetBSD: kvm_proc.c,v 1.78.6.1 2008/11/29 21:00:00 bouyer Exp $");
+__RCSID("$NetBSD: kvm_proc.c,v 1.78.6.2 2009/04/01 00:25:21 snj Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -99,6 +99,7 @@
#include <kvm.h>
#include <uvm/uvm_extern.h>
+#include <uvm/uvm_param.h>
#include <uvm/uvm_amap.h>
#include <sys/sysctl.h>
@@ -679,6 +680,12 @@
kp2p->p_vm_tsize = kp->kp_eproc.e_vm.vm_tsize;
kp2p->p_vm_dsize = kp->kp_eproc.e_vm.vm_dsize;
kp2p->p_vm_ssize = kp->kp_eproc.e_vm.vm_ssize;
+ kp2p->p_vm_vsize = kp->kp_eproc.e_vm.vm_map.size;
+ /* Adjust mapped size */
+ kp2p->p_vm_msize =
+ (kp->kp_eproc.e_vm.vm_map.size / kd->nbpg) -
+ kp->kp_eproc.e_vm.vm_issize +
+ kp->kp_eproc.e_vm.vm_ssize;
kp2p->p_eflag = (int32_t)kp->kp_eproc.e_flag;
Index: src/sys/arch/mips/mips/cpu_exec.c
diff -u src/sys/arch/mips/mips/cpu_exec.c:1.50 src/sys/arch/mips/mips/cpu_exec.c:1.50.54.1
--- src/sys/arch/mips/mips/cpu_exec.c:1.50 Sun Mar 4 06:00:12 2007
+++ src/sys/arch/mips/mips/cpu_exec.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_exec.c,v 1.50 2007/03/04 06:00:12 christos Exp $ */
+/* $NetBSD: cpu_exec.c,v 1.50.54.1 2009/04/01 00:25:21 snj Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_exec.c,v 1.50 2007/03/04 06:00:12 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_exec.c,v 1.50.54.1 2009/04/01 00:25:21 snj Exp $");
#include "opt_compat_netbsd.h"
#include "opt_compat_ultrix.h"
@@ -299,12 +299,12 @@
* note that in memory, things assumed to be: 0 ....... ep_maxsaddr
* <stack> ep_minsaddr
*/
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero,
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero,
((epp->ep_minsaddr - epp->ep_ssize) - epp->ep_maxsaddr),
- epp->ep_maxsaddr, NULLVP, 0, VM_PROT_NONE);
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, epp->ep_ssize,
+ epp->ep_maxsaddr, NULLVP, 0, VM_PROT_NONE, VMCMD_STACK);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, epp->ep_ssize,
(epp->ep_minsaddr - epp->ep_ssize), NULLVP, 0,
- VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, VMCMD_STACK);
return 0;
}
Index: src/sys/compat/darwin/darwin_exec.c
diff -u src/sys/compat/darwin/darwin_exec.c:1.55 src/sys/compat/darwin/darwin_exec.c:1.55.4.1
--- src/sys/compat/darwin/darwin_exec.c:1.55 Wed Oct 15 06:51:19 2008
+++ src/sys/compat/darwin/darwin_exec.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: darwin_exec.c,v 1.55 2008/10/15 06:51:19 wrstuden Exp $ */
+/* $NetBSD: darwin_exec.c,v 1.55.4.1 2009/04/01 00:25:21 snj Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include "opt_compat_darwin.h" /* For COMPAT_DARWIN in mach_port.h */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: darwin_exec.c,v 1.55 2008/10/15 06:51:19 wrstuden Exp $");
+__KERNEL_RCSID(0, "$NetBSD: darwin_exec.c,v 1.55.4.1 2009/04/01 00:25:21 snj Exp $");
#include "opt_syscall_debug.h"
@@ -426,12 +426,13 @@
noaccess_linear_min = (u_long)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
access_size), noaccess_size);
if (noaccess_size > 0) {
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
- noaccess_linear_min, NULL, 0, VM_PROT_NONE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
+ noaccess_linear_min, NULL, 0, VM_PROT_NONE, VMCMD_STACK);
}
KASSERT(access_size > 0);
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
- access_linear_min, NULL, 0, VM_PROT_READ | VM_PROT_WRITE);
+ NEW_VMCMD(2&epp->ep_vmcmds, vmcmd_map_zero, access_size,
+ access_linear_min, NULL, 0, VM_PROT_READ | VM_PROT_WRITE,
+ VMCMD_STACK);
return 0;
}
Index: src/sys/compat/ibcs2/ibcs2_exec.c
diff -u src/sys/compat/ibcs2/ibcs2_exec.c:1.71 src/sys/compat/ibcs2/ibcs2_exec.c:1.71.4.1
--- src/sys/compat/ibcs2/ibcs2_exec.c:1.71 Wed Oct 15 06:51:19 2008
+++ src/sys/compat/ibcs2/ibcs2_exec.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ibcs2_exec.c,v 1.71 2008/10/15 06:51:19 wrstuden Exp $ */
+/* $NetBSD: ibcs2_exec.c,v 1.71.4.1 2009/04/01 00:25:21 snj Exp $ */
/*
* Copyright (c) 1994, 1995, 1998 Scott Bartram
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ibcs2_exec.c,v 1.71 2008/10/15 06:51:19 wrstuden Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibcs2_exec.c,v 1.71.4.1 2009/04/01 00:25:21 snj Exp $");
#if defined(_KERNEL_OPT)
#include "opt_syscall_debug.h"
@@ -181,14 +181,14 @@
noaccess_linear_min = (u_long)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
access_size), noaccess_size);
if (noaccess_size > 0) {
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
- noaccess_linear_min, NULL, 0, VM_PROT_NONE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
+ noaccess_linear_min, NULL, 0, VM_PROT_NONE, VMCMD_STACK);
}
KASSERT(access_size > 0);
/* XXX: some ibcs2 binaries need an executable stack. */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
access_linear_min, NULL, 0, VM_PROT_READ | VM_PROT_WRITE |
- VM_PROT_EXECUTE);
+ VM_PROT_EXECUTE, VMCMD_STACK);
return 0;
}
Index: src/sys/compat/irix/irix_resource.c
diff -u src/sys/compat/irix/irix_resource.c:1.14 src/sys/compat/irix/irix_resource.c:1.14.10.1
--- src/sys/compat/irix/irix_resource.c:1.14 Mon Apr 28 20:23:42 2008
+++ src/sys/compat/irix/irix_resource.c Wed Apr 1 00:25:21 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: irix_resource.c,v 1.14 2008/04/28 20:23:42 martin Exp $ */
+/* $NetBSD: irix_resource.c,v 1.14.10.1 2009/04/01 00:25:21 snj Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_resource.c,v 1.14 2008/04/28 20:23:42 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_resource.c,v 1.14.10.1 2009/04/01 00:25:21 snj Exp $");
#include <sys/types.h>
#include <sys/signal.h>
@@ -76,6 +76,8 @@
bsd_res = RLIMIT_NOFILE;
break;
case IRIX_RLIMIT_VMEM:
+ bsd_res = RLIMIT_AS;
+ break;
case IRIX_RLIMIT_RSS:
bsd_res = RLIMIT_RSS;
break;
Index: src/sys/compat/linux/arch/amd64/linux_exec_machdep.c
diff -u src/sys/compat/linux/arch/amd64/linux_exec_machdep.c:1.13 src/sys/compat/linux/arch/amd64/linux_exec_machdep.c:1.13.2.1
--- src/sys/compat/linux/arch/amd64/linux_exec_machdep.c:1.13 Tue Oct 28 18:37:41 2008
+++ src/sys/compat/linux/arch/amd64/linux_exec_machdep.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_exec_machdep.c,v 1.13 2008/10/28 18:37:41 christos Exp $ */
+/* $NetBSD: linux_exec_machdep.c,v 1.13.2.1 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 2005 Emmanuel Dreyfus, all rights reserved
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_exec_machdep.c,v 1.13 2008/10/28 18:37:41 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_exec_machdep.c,v 1.13.2.1 2009/04/01 00:25:22 snj Exp $");
#ifdef __amd64__
#define ELFSIZE 64
@@ -111,12 +111,13 @@
noaccess_linear_min = (u_long)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
access_size), noaccess_size);
if (noaccess_size > 0) {
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
- noaccess_linear_min, NULLVP, 0, VM_PROT_NONE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
+ noaccess_linear_min, NULLVP, 0, VM_PROT_NONE, VMCMD_STACK);
}
KASSERT(access_size > 0);
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
- access_linear_min, NULLVP, 0, VM_PROT_READ | VM_PROT_WRITE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
+ access_linear_min, NULLVP, 0, VM_PROT_READ | VM_PROT_WRITE,
+ VMCMD_STACK);
return 0;
}
Index: src/sys/compat/linux/arch/i386/linux_exec_machdep.c
diff -u src/sys/compat/linux/arch/i386/linux_exec_machdep.c:1.11 src/sys/compat/linux/arch/i386/linux_exec_machdep.c:1.11.4.1
--- src/sys/compat/linux/arch/i386/linux_exec_machdep.c:1.11 Sun Oct 26 20:46:05 2008
+++ src/sys/compat/linux/arch/i386/linux_exec_machdep.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_exec_machdep.c,v 1.11 2008/10/26 20:46:05 christos Exp $ */
+/* $NetBSD: linux_exec_machdep.c,v 1.11.4.1 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_exec_machdep.c,v 1.11 2008/10/26 20:46:05 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_exec_machdep.c,v 1.11.4.1 2009/04/01 00:25:22 snj Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vm86.h"
@@ -121,12 +121,13 @@
noaccess_linear_min = (u_long)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
access_size), noaccess_size);
if (noaccess_size > 0) {
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
- noaccess_linear_min, NULLVP, 0, VM_PROT_NONE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
+ noaccess_linear_min, NULLVP, 0, VM_PROT_NONE, VMCMD_STACK);
}
KASSERT(access_size > 0);
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
- access_linear_min, NULLVP, 0, VM_PROT_READ | VM_PROT_WRITE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
+ access_linear_min, NULLVP, 0, VM_PROT_READ | VM_PROT_WRITE,
+ VMCMD_STACK);
return 0;
}
Index: src/sys/compat/linux/common/linux_limit.h
diff -u src/sys/compat/linux/common/linux_limit.h:1.3 src/sys/compat/linux/common/linux_limit.h:1.3.10.1
--- src/sys/compat/linux/common/linux_limit.h:1.3 Mon Apr 28 20:23:43 2008
+++ src/sys/compat/linux/common/linux_limit.h Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_limit.h,v 1.3 2008/04/28 20:23:43 martin Exp $ */
+/* $NetBSD: linux_limit.h,v 1.3.10.1 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
@@ -80,6 +80,7 @@
case LINUX_RLIMIT_MEMLOCK:
return RLIMIT_MEMLOCK;
case LINUX_RLIMIT_AS:
+ return RLIMIT_AS;
case LINUX_RLIMIT_LOCKS:
return -EOPNOTSUPP;
default:
Index: src/sys/compat/osf1/osf1_resource.c
diff -u src/sys/compat/osf1/osf1_resource.c:1.13 src/sys/compat/osf1/osf1_resource.c:1.13.12.1
--- src/sys/compat/osf1/osf1_resource.c:1.13 Thu Apr 24 18:39:23 2008
+++ src/sys/compat/osf1/osf1_resource.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_resource.c,v 1.13 2008/04/24 18:39:23 ad Exp $ */
+/* $NetBSD: osf1_resource.c,v 1.13.12.1 2009/04/01 00:25:22 snj Exp $ */
/*
* Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_resource.c,v 1.13 2008/04/24 18:39:23 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_resource.c,v 1.13.12.1 2009/04/01 00:25:22 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -72,7 +72,9 @@
case OSF1_RLIMIT_NOFILE:
SCARG(&a, which) = RLIMIT_NOFILE;
break;
- case OSF1_RLIMIT_AS: /* unhandled */
+ case OSF1_RLIMIT_AS:
+ SCARG(&a, which) = RLIMIT_AS;
+ break;
default:
return (EINVAL);
}
@@ -141,7 +143,9 @@
case OSF1_RLIMIT_NOFILE:
SCARG(&a, which) = RLIMIT_NOFILE;
break;
- case OSF1_RLIMIT_AS: /* unhandled */
+ case OSF1_RLIMIT_AS:
+ SCARG(&a, which) = RLIMIT_AS;
+ break;
default:
return (EINVAL);
}
Index: src/sys/compat/svr4/svr4_resource.c
diff -u src/sys/compat/svr4/svr4_resource.c:1.16 src/sys/compat/svr4/svr4_resource.c:1.16.10.1
--- src/sys/compat/svr4/svr4_resource.c:1.16 Mon Apr 28 20:23:45 2008
+++ src/sys/compat/svr4/svr4_resource.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_resource.c,v 1.16 2008/04/28 20:23:45 martin Exp $ */
+/* $NetBSD: svr4_resource.c,v 1.16.10.1 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_resource.c,v 1.16 2008/04/28 20:23:45 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_resource.c,v 1.16.10.1 2009/04/01 00:25:22 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -66,7 +66,7 @@
case SVR4_RLIMIT_NOFILE:
return RLIMIT_NOFILE;
case SVR4_RLIMIT_VMEM:
- return RLIMIT_RSS;
+ return RLIMIT_AS;
default:
return -1;
}
Index: src/sys/compat/svr4_32/svr4_32_resource.c
diff -u src/sys/compat/svr4_32/svr4_32_resource.c:1.15 src/sys/compat/svr4_32/svr4_32_resource.c:1.15.10.1
--- src/sys/compat/svr4_32/svr4_32_resource.c:1.15 Mon Apr 28 20:23:46 2008
+++ src/sys/compat/svr4_32/svr4_32_resource.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_32_resource.c,v 1.15 2008/04/28 20:23:46 martin Exp $ */
+/* $NetBSD: svr4_32_resource.c,v 1.15.10.1 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_32_resource.c,v 1.15 2008/04/28 20:23:46 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_32_resource.c,v 1.15.10.1 2009/04/01 00:25:22 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -68,7 +68,7 @@
case SVR4_RLIMIT_NOFILE:
return RLIMIT_NOFILE;
case SVR4_RLIMIT_VMEM:
- return RLIMIT_RSS;
+ return RLIMIT_AS;
default:
return -1;
}
Index: src/sys/kern/exec_subr.c
diff -u src/sys/kern/exec_subr.c:1.61 src/sys/kern/exec_subr.c:1.61.8.1
--- src/sys/kern/exec_subr.c:1.61 Mon Jun 2 16:16:27 2008
+++ src/sys/kern/exec_subr.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: exec_subr.c,v 1.61 2008/06/02 16:16:27 ad Exp $ */
+/* $NetBSD: exec_subr.c,v 1.61.8.1 2009/04/01 00:25:22 snj Exp $ */
/*
* Copyright (c) 1993, 1994, 1996 Christopher G. Demetriou
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.61 2008/06/02 16:16:27 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.61.8.1 2009/04/01 00:25:22 snj Exp $");
#include "opt_pax.h"
@@ -327,6 +327,8 @@
UVM_MAPFLAG(prot, maxprot, UVM_INH_COPY,
UVM_ADV_NORMAL,
UVM_FLAG_FIXED|UVM_FLAG_COPYONW));
+ if (cmd->ev_flags & VMCMD_STACK)
+ curproc->p_vmspace->vm_issize += atop(round_page(cmd->ev_len));
return error;
}
@@ -409,12 +411,13 @@
noaccess_linear_min = (u_long)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
access_size), noaccess_size);
if (noaccess_size > 0) {
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
- noaccess_linear_min, NULL, 0, VM_PROT_NONE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
+ noaccess_linear_min, NULL, 0, VM_PROT_NONE, VMCMD_STACK);
}
KASSERT(access_size > 0);
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
- access_linear_min, NULL, 0, VM_PROT_READ | VM_PROT_WRITE);
+ NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
+ access_linear_min, NULL, 0, VM_PROT_READ | VM_PROT_WRITE,
+ VMCMD_STACK);
return 0;
}
Index: src/sys/kern/init_sysctl.c
diff -u src/sys/kern/init_sysctl.c:1.149.4.3 src/sys/kern/init_sysctl.c:1.149.4.4
--- src/sys/kern/init_sysctl.c:1.149.4.3 Sun Mar 15 20:23:26 2009
+++ src/sys/kern/init_sysctl.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: init_sysctl.c,v 1.149.4.3 2009/03/15 20:23:26 snj Exp $ */
+/* $NetBSD: init_sysctl.c,v 1.149.4.4 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 2003, 2007, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_sysctl.c,v 1.149.4.3 2009/03/15 20:23:26 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_sysctl.c,v 1.149.4.4 2009/04/01 00:25:22 snj Exp $");
#include "opt_sysv.h"
#include "opt_compat_netbsd32.h"
@@ -3001,6 +3001,14 @@
ki->p_vm_tsize = vm->vm_tsize;
ki->p_vm_dsize = vm->vm_dsize;
ki->p_vm_ssize = vm->vm_ssize;
+ ki->p_vm_vsize = vm->vm_map.size;
+ /*
+ * Since the stack is initially mapped mostly with
+ * PROT_NONE and grown as needed, adjust the "mapped size"
+ * to skip the unused stack portion.
+ */
+ ki->p_vm_msize =
+ atop(vm->vm_map.size) - vm->vm_issize + vm->vm_ssize;
/* Pick the primary (first) LWP */
l = proc_active_lwp(p);
@@ -3171,6 +3179,7 @@
ep->e_vm.vm_tsize = vm->vm_tsize;
ep->e_vm.vm_dsize = vm->vm_dsize;
ep->e_vm.vm_ssize = vm->vm_ssize;
+ ep->e_vm.vm_map.size = vm->vm_map.size;
/* Pick the primary (first) LWP */
l = proc_active_lwp(p);
Index: src/sys/kern/kern_exec.c
diff -u src/sys/kern/kern_exec.c:1.280.4.1 src/sys/kern/kern_exec.c:1.280.4.2
--- src/sys/kern/kern_exec.c:1.280.4.1 Tue Nov 18 17:11:52 2008
+++ src/sys/kern/kern_exec.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_exec.c,v 1.280.4.1 2008/11/18 17:11:52 snj Exp $ */
+/* $NetBSD: kern_exec.c,v 1.280.4.2 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.280.4.1 2008/11/18 17:11:52 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.280.4.2 2009/04/01 00:25:22 snj Exp $");
#include "opt_ktrace.h"
#include "opt_syscall_debug.h"
@@ -753,6 +753,7 @@
vm->vm_daddr = (void*)pack.ep_daddr;
vm->vm_dsize = btoc(pack.ep_dsize);
vm->vm_ssize = btoc(pack.ep_ssize);
+ vm->vm_issize = 0;
vm->vm_maxsaddr = (void *)pack.ep_maxsaddr;
vm->vm_minsaddr = (void *)pack.ep_minsaddr;
Index: src/sys/kern/kern_resource.c
diff -u src/sys/kern/kern_resource.c:1.147 src/sys/kern/kern_resource.c:1.147.4.1
--- src/sys/kern/kern_resource.c:1.147 Sat Oct 11 13:40:57 2008
+++ src/sys/kern/kern_resource.c Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_resource.c,v 1.147 2008/10/11 13:40:57 pooka Exp $ */
+/* $NetBSD: kern_resource.c,v 1.147.4.1 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 1982, 1986, 1991, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.147 2008/10/11 13:40:57 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.147.4.1 2009/04/01 00:25:22 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1002,6 +1002,7 @@
create_proc_plimit("maxproc", PROC_PID_LIMIT_NPROC);
create_proc_plimit("descriptors", PROC_PID_LIMIT_NOFILE);
create_proc_plimit("sbsize", PROC_PID_LIMIT_SBSIZE);
+ create_proc_plimit("vmemoryuse", PROC_PID_LIMIT_AS);
#undef create_proc_plimit
Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.330.4.5 src/sys/sys/param.h:1.330.4.6
--- src/sys/sys/param.h:1.330.4.5 Fri Mar 20 04:28:17 2009
+++ src/sys/sys/param.h Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.330.4.5 2009/03/20 04:28:17 snj Exp $ */
+/* $NetBSD: param.h,v 1.330.4.6 2009/04/01 00:25:22 snj Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
* 2.99.9 (299000900)
*/
-#define __NetBSD_Version__ 500000001 /* NetBSD 5.0_RC3 */
+#define __NetBSD_Version__ 500000002 /* NetBSD 5.0_RC3 */
#define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
(m) * 1000000) + (p) * 100) <= __NetBSD_Version__)
Index: src/sys/sys/resource.h
diff -u src/sys/sys/resource.h:1.29 src/sys/sys/resource.h:1.29.72.1
--- src/sys/sys/resource.h:1.29 Sun Jul 23 22:06:14 2006
+++ src/sys/sys/resource.h Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: resource.h,v 1.29 2006/07/23 22:06:14 ad Exp $ */
+/* $NetBSD: resource.h,v 1.29.72.1 2009/04/01 00:25:22 snj Exp $ */
/*
* Copyright (c) 1982, 1986, 1993
@@ -92,9 +92,11 @@
#define RLIMIT_NPROC 7 /* number of processes */
#define RLIMIT_NOFILE 8 /* number of open files */
#define RLIMIT_SBSIZE 9 /* maximum size of all socket buffers */
+#define RLIMIT_AS 10 /* virtual process size (inclusive of mmap) */
+#define RLIMIT_VMEM RLIMIT_AS /* common alias */
#if defined(_NETBSD_SOURCE)
-#define RLIM_NLIMITS 10 /* number of resource limits */
+#define RLIM_NLIMITS 11 /* number of resource limits */
#endif
#define RLIM_INFINITY (~((u_quad_t)1 << 63)) /* no limit */
Index: src/sys/sys/sysctl.h
diff -u src/sys/sys/sysctl.h:1.177 src/sys/sys/sysctl.h:1.177.4.1
--- src/sys/sys/sysctl.h:1.177 Wed Aug 27 08:53:55 2008
+++ src/sys/sys/sysctl.h Wed Apr 1 00:25:22 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: sysctl.h,v 1.177 2008/08/27 08:53:55 christos Exp $ */
+/* $NetBSD: sysctl.h,v 1.177.4.1 2009/04/01 00:25:22 snj Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -585,6 +585,8 @@
uint32_t p_svuid; /* UID_T: saved user id */
uint32_t p_svgid; /* GID_T: saved group id */
char p_ename[KI_MAXEMULLEN]; /* emulation name */
+ int64_t p_vm_vsize; /* SEGSZ_T: total map size (pages) */
+ int64_t p_vm_msize; /* SEGSZ_T: stack-adjusted map size (pages) */
};
/*
@@ -951,6 +953,7 @@
#define PROC_PID_LIMIT_NPROC (RLIMIT_NPROC+1)
#define PROC_PID_LIMIT_NOFILE (RLIMIT_NOFILE+1)
#define PROC_PID_LIMIT_SBSIZE (RLIMIT_SBSIZE+1)
+#define PROC_PID_LIMIT_AS (RLIMIT_AS+1)
#define PROC_PID_LIMIT_MAXID (RLIM_NLIMITS+1)
#define PROC_PID_LIMIT_NAMES { \
@@ -965,6 +968,7 @@
{ "maxproc", CTLTYPE_NODE }, \
{ "descriptors", CTLTYPE_NODE }, \
{ "sbsize", CTLTYPE_NODE }, \
+ { "vmemoryuse", CTLTYPE_NODE }, \
}
/* for each type, either hard or soft value */
#define PROC_PID_LIMIT_TYPE_SOFT 1
Index: src/sys/uvm/uvm_extern.h
diff -u src/sys/uvm/uvm_extern.h:1.148.4.1 src/sys/uvm/uvm_extern.h:1.148.4.2
--- src/sys/uvm/uvm_extern.h:1.148.4.1 Sun Nov 2 23:08:56 2008
+++ src/sys/uvm/uvm_extern.h Wed Apr 1 00:25:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_extern.h,v 1.148.4.1 2008/11/02 23:08:56 snj Exp $ */
+/* $NetBSD: uvm_extern.h,v 1.148.4.2 2009/04/01 00:25:23 snj Exp $ */
/*
*
@@ -501,6 +501,7 @@
segsz_t vm_tsize; /* text size (pages) XXX */
segsz_t vm_dsize; /* data size (pages) XXX */
segsz_t vm_ssize; /* stack size (pages) */
+ segsz_t vm_issize; /* initial unmapped stack size (pages) */
void * vm_taddr; /* user virtual address of text XXX */
void * vm_daddr; /* user virtual address of data XXX */
void *vm_maxsaddr; /* user VA at max stack growth */
Index: src/sys/uvm/uvm_glue.c
diff -u src/sys/uvm/uvm_glue.c:1.133 src/sys/uvm/uvm_glue.c:1.133.6.1
--- src/sys/uvm/uvm_glue.c:1.133 Wed Jun 25 19:20:56 2008
+++ src/sys/uvm/uvm_glue.c Wed Apr 1 00:25:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_glue.c,v 1.133 2008/06/25 19:20:56 ad Exp $ */
+/* $NetBSD: uvm_glue.c,v 1.133.6.1 2009/04/01 00:25:23 snj Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_glue.c,v 1.133 2008/06/25 19:20:56 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_glue.c,v 1.133.6.1 2009/04/01 00:25:23 snj Exp $");
#include "opt_coredump.h"
#include "opt_kgdb.h"
@@ -426,6 +426,8 @@
p->p_rlimit[RLIMIT_STACK].rlim_max = maxsmap;
p->p_rlimit[RLIMIT_DATA].rlim_cur = DFLDSIZ;
p->p_rlimit[RLIMIT_DATA].rlim_max = maxdmap;
+ p->p_rlimit[RLIMIT_AS].rlim_cur = RLIM_INFINITY;
+ p->p_rlimit[RLIMIT_AS].rlim_max = RLIM_INFINITY;
p->p_rlimit[RLIMIT_RSS].rlim_cur = ptoa(uvmexp.free);
}
Index: src/sys/uvm/uvm_mmap.c
diff -u src/sys/uvm/uvm_mmap.c:1.126 src/sys/uvm/uvm_mmap.c:1.126.8.1
--- src/sys/uvm/uvm_mmap.c:1.126 Tue Jun 3 21:48:27 2008
+++ src/sys/uvm/uvm_mmap.c Wed Apr 1 00:25:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_mmap.c,v 1.126 2008/06/03 21:48:27 ad Exp $ */
+/* $NetBSD: uvm_mmap.c,v 1.126.8.1 2009/04/01 00:25:23 snj Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -51,7 +51,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.126 2008/06/03 21:48:27 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.126.8.1 2009/04/01 00:25:23 snj Exp $");
#include "opt_compat_netbsd.h"
#include "opt_pax.h"
@@ -502,24 +502,6 @@
pos = 0;
}
- /*
- * XXX (in)sanity check. We don't do proper datasize checking
- * XXX for anonymous (or private writable) mmap(). However,
- * XXX know that if we're trying to allocate more than the amount
- * XXX remaining under our current data size limit, _that_ should
- * XXX be disallowed.
- */
- if ((flags & MAP_ANON) != 0 ||
- ((flags & MAP_PRIVATE) != 0 && (prot & PROT_WRITE) != 0)) {
- if (size >
- (p->p_rlimit[RLIMIT_DATA].rlim_cur -
- ctob(p->p_vmspace->vm_dsize))) {
- if (fp != NULL)
- fd_putfile(fd);
- return (ENOMEM);
- }
- }
-
#if NVERIEXEC > 0
if (handle != NULL) {
/*
@@ -1123,6 +1105,15 @@
}
/*
+ * check resource limits
+ */
+
+ if (!VM_MAP_IS_KERNEL(map) &&
+ (((rlim_t)curproc->p_vmspace->vm_map.size + (rlim_t)size) >
+ curproc->p_rlimit[RLIMIT_AS].rlim_cur))
+ return ENOMEM;
+
+ /*
* handle anon vs. non-anon mappings. for non-anon mappings attach
* to underlying vm object.
*/
Index: src/usr.bin/systat/ps.c
diff -u src/usr.bin/systat/ps.c:1.30 src/usr.bin/systat/ps.c:1.30.18.1
--- src/usr.bin/systat/ps.c:1.30 Sat Feb 17 22:49:57 2007
+++ src/usr.bin/systat/ps.c Wed Apr 1 00:25:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ps.c,v 1.30 2007/02/17 22:49:57 pavel Exp $ */
+/* $NetBSD: ps.c,v 1.30.18.1 2009/04/01 00:25:23 snj Exp $ */
/*-
* Copyright (c) 1999
@@ -45,7 +45,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: ps.c,v 1.30 2007/02/17 22:49:57 pavel Exp $");
+__RCSID("$NetBSD: ps.c,v 1.30.18.1 2009/04/01 00:25:23 snj Exp $");
#endif /* not lint */
#include <sys/param.h>
@@ -247,7 +247,7 @@
{
int i;
- i = pgtok(kp->p_vm_dsize + kp->p_vm_ssize + kp->p_vm_tsize);
+ i = pgtok(kp->p_vm_msize);
return ((i < 0) ? 0 : i);
}