diff options
Diffstat (limited to 'libpager/pager-create.c')
-rw-r--r-- | libpager/pager-create.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/libpager/pager-create.c b/libpager/pager-create.c index b583f023..b3b7c8f0 100644 --- a/libpager/pager-create.c +++ b/libpager/pager-create.c @@ -17,21 +17,19 @@ #include "priv.h" -/* Create and return a new pager with user info UPI. */ -struct pager * -pager_create (struct user_pager_info *upi, - struct port_bucket *bucket, - boolean_t may_cache, - memory_object_copy_strategy_t copy_strategy, - boolean_t notify_on_evict) +static struct pager * +_pager_create (size_t size, + struct port_bucket *bucket, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy, + boolean_t notify_on_evict) { struct pager *p; - errno = ports_create_port (_pager_class, bucket, sizeof (struct pager), &p); + errno = ports_create_port (_pager_class, bucket, sizeof *p + size, &p); if (errno) return 0; - p->upi = upi; p->pager_state = NOTINIT; pthread_mutex_init (&p->interlock, NULL); pthread_cond_init (&p->wakeup, NULL); @@ -50,6 +48,40 @@ pager_create (struct user_pager_info *upi, return p; } +/* Create and return a new pager with user info UPI. */ +struct pager * +pager_create (struct user_pager_info *upi, + struct port_bucket *bucket, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy, + boolean_t notify_on_evict) +{ + struct pager *p; + + p = _pager_create (0, bucket, may_cache, copy_strategy, notify_on_evict); + if (p) + p->upi = upi; + + return p; +} + +struct pager * +pager_create_alloc (size_t u_pager_size, + struct port_bucket *bucket, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy, + boolean_t notify_on_evict) +{ + struct pager *p; + + p = _pager_create (u_pager_size, bucket, may_cache, copy_strategy, + notify_on_evict); + if (p) + p->upi = (struct user_pager_info *) ((char *) p + sizeof *p); + + return p; +} + /* This causes the function to be run at startup by compiler magic. */ static void create_class (void) __attribute__ ((constructor)); |