mmap stacks, makes it possible to align them
This commit is contained in:
parent
16ea8193e3
commit
cb50a739c3
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: callcontext.c,v 1.10 2007/10/21 19:25:58 pooka Exp $ */
|
||||
/* $NetBSD: callcontext.c,v 1.11 2007/10/26 13:51:14 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006 Antti Kantee. All Rights Reserved.
|
||||
@ -27,10 +27,11 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#if !defined(lint)
|
||||
__RCSID("$NetBSD: callcontext.c,v 1.10 2007/10/21 19:25:58 pooka Exp $");
|
||||
__RCSID("$NetBSD: callcontext.c,v 1.11 2007/10/26 13:51:14 pooka Exp $");
|
||||
#endif /* !lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
@ -127,7 +128,9 @@ struct puffs_cc *
|
||||
puffs_cc_create(struct puffs_usermount *pu)
|
||||
{
|
||||
struct puffs_cc *volatile pcc;
|
||||
size_t stacksize = 1<<pu->pu_cc_stackshift;
|
||||
stack_t *st;
|
||||
void *sp;
|
||||
|
||||
pcc = malloc(sizeof(struct puffs_cc));
|
||||
if (!pcc)
|
||||
@ -150,12 +153,14 @@ puffs_cc_create(struct puffs_usermount *pu)
|
||||
|
||||
/* allocate stack for execution */
|
||||
st = &pcc->pcc_uc.uc_stack;
|
||||
st->ss_sp = pcc->pcc_stack = malloc(pu->pu_cc_stacksize);
|
||||
if (st->ss_sp == NULL) {
|
||||
sp = mmap(NULL, stacksize, PROT_READ|PROT_WRITE,
|
||||
MAP_ANON|MAP_PRIVATE|MAP_ALIGNED(pu->pu_cc_stackshift), -1, 0);
|
||||
if (sp == MAP_FAILED) {
|
||||
free(pcc);
|
||||
return NULL;
|
||||
}
|
||||
st->ss_size = pu->pu_cc_stacksize;
|
||||
st->ss_sp = pcc->pcc_stack = sp;
|
||||
st->ss_size = stacksize;
|
||||
st->ss_flags = 0;
|
||||
|
||||
/*
|
||||
@ -186,7 +191,9 @@ puffs_cc_setcaller(struct puffs_cc *pcc, pid_t pid, lwpid_t lid)
|
||||
void
|
||||
puffs_cc_destroy(struct puffs_cc *pcc)
|
||||
{
|
||||
struct puffs_usermount *pu = pcc->pcc_pu;
|
||||
size_t stacksize = 1<<pu->pu_cc_stackshift;
|
||||
|
||||
free(pcc->pcc_stack);
|
||||
munmap(pcc->pcc_stack, stacksize);
|
||||
free(pcc);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: puffs.c,v 1.68 2007/10/25 10:59:45 pooka Exp $ */
|
||||
/* $NetBSD: puffs.c,v 1.69 2007/10/26 13:51:14 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
|
||||
@ -31,7 +31,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#if !defined(lint)
|
||||
__RCSID("$NetBSD: puffs.c,v 1.68 2007/10/25 10:59:45 pooka Exp $");
|
||||
__RCSID("$NetBSD: puffs.c,v 1.69 2007/10/26 13:51:14 pooka Exp $");
|
||||
#endif /* !lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -147,8 +147,16 @@ puffs_getstate(struct puffs_usermount *pu)
|
||||
void
|
||||
puffs_setstacksize(struct puffs_usermount *pu, size_t ss)
|
||||
{
|
||||
|
||||
pu->pu_cc_stacksize = ss;
|
||||
int stackshift;
|
||||
|
||||
assert(puffs_getstate(pu) == PUFFS_STATE_BEFOREMOUNT);
|
||||
stackshift = -1;
|
||||
while (ss) {
|
||||
ss >>= 1;
|
||||
stackshift++;
|
||||
}
|
||||
pu->pu_cc_stackshift = stackshift;
|
||||
assert(1<<stackshift == ss);
|
||||
}
|
||||
|
||||
struct puffs_pathobj *
|
||||
@ -412,7 +420,7 @@ _puffs_init(int develv, struct puffs_ops *pops, const char *mntfromname,
|
||||
free(pops); /* XXX */
|
||||
|
||||
pu->pu_privdata = priv;
|
||||
pu->pu_cc_stacksize = PUFFS_CC_STACKSIZE_DEFAULT;
|
||||
pu->pu_cc_stackshift = PUFFS_CC_STACKSHIFT_DEFAULT;
|
||||
LIST_INIT(&pu->pu_pnodelst);
|
||||
LIST_INIT(&pu->pu_framectrl.fb_ios);
|
||||
LIST_INIT(&pu->pu_ccnukelst);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: puffs.h,v 1.89 2007/10/21 19:25:58 pooka Exp $ */
|
||||
/* $NetBSD: puffs.h,v 1.90 2007/10/26 13:51:14 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
|
||||
@ -116,7 +116,7 @@ struct puffs_usermount;
|
||||
/*
|
||||
* Magic constants
|
||||
*/
|
||||
#define PUFFS_CC_STACKSIZE_DEFAULT (1024*1024)
|
||||
#define PUFFS_CC_STACKSHIFT_DEFAULT 18
|
||||
|
||||
struct puffs_cn {
|
||||
struct puffs_kcn *pcn_pkcnp; /* kernel input */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: puffs_priv.h,v 1.26 2007/10/25 10:59:45 pooka Exp $ */
|
||||
/* $NetBSD: puffs_priv.h,v 1.27 2007/10/26 13:51:15 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006 Antti Kantee. All Rights Reserved.
|
||||
@ -97,7 +97,7 @@ struct puffs_usermount {
|
||||
size_t pu_maxreqlen;
|
||||
|
||||
uint32_t pu_flags;
|
||||
size_t pu_cc_stacksize;
|
||||
int pu_cc_stackshift;
|
||||
|
||||
int pu_kq;
|
||||
int pu_state;
|
||||
|
Loading…
x
Reference in New Issue
Block a user