diff options
-rw-r--r-- | sys/kern/init_main.c | 17 | ||||
-rw-r--r-- | sys/kern/kern_resource.c | 32 | ||||
-rw-r--r-- | sys/sys/resourcevar.h | 3 |
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 *); |