summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/init_main.c17
-rw-r--r--sys/kern/kern_resource.c32
-rw-r--r--sys/sys/resourcevar.h3
3 files changed, 28 insertions, 24 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 180d34cac1c..3fa70035b8e 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: init_main.c,v 1.287 2019/06/01 14:11:17 mpi Exp $ */
+/* $OpenBSD: init_main.c,v 1.288 2019/06/02 03:58:28 visa Exp $ */
/* $NetBSD: init_main.c,v 1.84.4.1 1996/06/02 09:08:06 mrg Exp $ */
/*
@@ -191,8 +191,6 @@ main(void *framep)
struct proc *p;
struct process *pr;
struct pdevinit *pdev;
- quad_t lim;
- int i;
extern struct pdevinit pdevinit[];
extern void disk_init(void);
@@ -318,19 +316,8 @@ main(void *framep)
p->p_fd = pr->ps_fd = fdinit();
/* Create the limits structures. */
+ lim_startup(&limit0);
pr->ps_limit = &limit0;
- for (i = 0; i < nitems(p->p_rlimit); i++)
- limit0.pl_rlimit[i].rlim_cur =
- limit0.pl_rlimit[i].rlim_max = RLIM_INFINITY;
- limit0.pl_rlimit[RLIMIT_NOFILE].rlim_cur = NOFILE;
- limit0.pl_rlimit[RLIMIT_NOFILE].rlim_max = MIN(NOFILE_MAX,
- (maxfiles - NOFILE > NOFILE) ? maxfiles - NOFILE : NOFILE);
- limit0.pl_rlimit[RLIMIT_NPROC].rlim_cur = MAXUPRC;
- lim = ptoa(uvmexp.free);
- limit0.pl_rlimit[RLIMIT_RSS].rlim_max = lim;
- limit0.pl_rlimit[RLIMIT_MEMLOCK].rlim_max = lim;
- limit0.pl_rlimit[RLIMIT_MEMLOCK].rlim_cur = lim / 3;
- limit0.pl_refcnt = 1;
/* Allocate a prototype map so we have something to fork. */
uvmspace_init(&vmspace0, pmap_kernel(), round_page(VM_MIN_ADDRESS),
diff --git a/sys/kern/kern_resource.c b/sys/kern/kern_resource.c
index c6982fb8c19..24559ecda99 100644
--- a/sys/kern/kern_resource.c
+++ b/sys/kern/kern_resource.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_resource.c,v 1.62 2019/06/01 14:11:17 mpi Exp $ */
+/* $OpenBSD: kern_resource.c,v 1.63 2019/06/02 03:58:28 visa Exp $ */
/* $NetBSD: kern_resource.c,v 1.38 1996/10/23 07:19:38 matthias Exp $ */
/*-
@@ -532,6 +532,29 @@ rucheck(void *arg)
struct pool plimit_pool;
+void
+lim_startup(struct plimit *limit0)
+{
+ rlim_t lim;
+ int i;
+
+ pool_init(&plimit_pool, sizeof(struct plimit), 0, IPL_MPFLOOR,
+ PR_WAITOK, "plimitpl", NULL);
+
+ for (i = 0; i < nitems(limit0->pl_rlimit); i++)
+ limit0->pl_rlimit[i].rlim_cur =
+ limit0->pl_rlimit[i].rlim_max = RLIM_INFINITY;
+ limit0->pl_rlimit[RLIMIT_NOFILE].rlim_cur = NOFILE;
+ limit0->pl_rlimit[RLIMIT_NOFILE].rlim_max = MIN(NOFILE_MAX,
+ (maxfiles - NOFILE > NOFILE) ? maxfiles - NOFILE : NOFILE);
+ limit0->pl_rlimit[RLIMIT_NPROC].rlim_cur = MAXUPRC;
+ lim = ptoa(uvmexp.free);
+ limit0->pl_rlimit[RLIMIT_RSS].rlim_max = lim;
+ limit0->pl_rlimit[RLIMIT_MEMLOCK].rlim_max = lim;
+ limit0->pl_rlimit[RLIMIT_MEMLOCK].rlim_cur = lim / 3;
+ limit0->pl_refcnt = 1;
+}
+
/*
* Make a copy of the plimit structure.
* We share these structures copy-on-write after fork,
@@ -541,13 +564,6 @@ struct plimit *
limcopy(struct plimit *lim)
{
struct plimit *newlim;
- static int initialized;
-
- if (!initialized) {
- pool_init(&plimit_pool, sizeof(struct plimit), 0, IPL_NONE,
- PR_WAITOK, "plimitpl", NULL);
- initialized = 1;
- }
newlim = pool_get(&plimit_pool, PR_WAITOK);
memcpy(newlim->pl_rlimit, lim->pl_rlimit,
diff --git a/sys/sys/resourcevar.h b/sys/sys/resourcevar.h
index bffde74a0e5..4e4988e7d04 100644
--- a/sys/sys/resourcevar.h
+++ b/sys/sys/resourcevar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: resourcevar.h,v 1.22 2019/06/01 14:11:18 mpi Exp $ */
+/* $OpenBSD: resourcevar.h,v 1.23 2019/06/02 03:58:28 visa Exp $ */
/* $NetBSD: resourcevar.h,v 1.12 1995/11/22 23:01:53 cgd Exp $ */
/*
@@ -65,6 +65,7 @@ void calctsru(struct tusage *, struct timespec *, struct timespec *,
struct timespec *);
void calcru(struct tusage *, struct timeval *, struct timeval *,
struct timeval *);
+void lim_startup(struct plimit *);
struct plimit *limcopy(struct plimit *);
void limfree(struct plimit *);