diff options
-rw-r--r-- | sys/uvm/uvm_addr.c | 175 | ||||
-rw-r--r-- | sys/uvm/uvm_addr.h | 24 |
2 files changed, 100 insertions, 99 deletions
diff --git a/sys/uvm/uvm_addr.c b/sys/uvm/uvm_addr.c index f4395b99bed..e77020d3a75 100644 --- a/sys/uvm/uvm_addr.c +++ b/sys/uvm/uvm_addr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_addr.c,v 1.7 2014/04/13 23:14:15 tedu Exp $ */ +/* $OpenBSD: uvm_addr.c,v 1.8 2014/06/10 20:08:48 kettenis Exp $ */ /* * Copyright (c) 2011 Ariane van der Steldt <ariane@stack.nl> @@ -109,76 +109,76 @@ struct uvm_addr_state uaddr_kbootstrap; struct vm_map_entry *uvm_addr_entrybyspace(struct uaddr_free_rbtree*, vsize_t); #endif /* !SMALL_KERNEL */ -void uaddr_kinsert(struct vm_map*, struct uvm_addr_state*, - struct vm_map_entry*); -void uaddr_kremove(struct vm_map*, struct uvm_addr_state*, - struct vm_map_entry*); -void uaddr_kbootstrapdestroy(struct uvm_addr_state*); - -void uaddr_destroy(struct uvm_addr_state*); -void uaddr_hint_destroy(struct uvm_addr_state*); -void uaddr_kbootstrap_destroy(struct uvm_addr_state*); -void uaddr_rnd_destroy(struct uvm_addr_state*); -void uaddr_bestfit_destroy(struct uvm_addr_state*); -void uaddr_pivot_destroy(struct uvm_addr_state*); - -int uaddr_lin_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +void uaddr_kinsert(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_kremove(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_kbootstrapdestroy(struct uvm_addr_state *); + +void uaddr_destroy(struct uvm_addr_state *); +void uaddr_hint_destroy(struct uvm_addr_state *); +void uaddr_kbootstrap_destroy(struct uvm_addr_state *); +void uaddr_rnd_destroy(struct uvm_addr_state *); +void uaddr_bestfit_destroy(struct uvm_addr_state *); +void uaddr_pivot_destroy(struct uvm_addr_state *); + +int uaddr_lin_select(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); -int uaddr_kbootstrap_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +int uaddr_kbootstrap_select(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); -int uaddr_rnd_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +int uaddr_rnd_select(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); -int uaddr_hint_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +int uaddr_hint_select(struct vm_map *, + struct uvm_addr_state*, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); -int uaddr_bestfit_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +int uaddr_bestfit_select(struct vm_map *, + struct uvm_addr_state*, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); #ifndef SMALL_KERNEL -int uaddr_pivot_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +int uaddr_pivot_select(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); -int uaddr_stack_brk_select(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, +int uaddr_stack_brk_select(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, + vaddr_t *, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); #endif /* !SMALL_KERNEL */ -void uaddr_rnd_insert(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry*); -void uaddr_rnd_remove(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry*); -void uaddr_bestfit_insert(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry*); -void uaddr_bestfit_remove(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry*); -void uaddr_pivot_insert(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry*); -void uaddr_pivot_remove(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry*); +void uaddr_rnd_insert(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_rnd_remove(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_bestfit_insert(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_bestfit_remove(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_pivot_insert(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); +void uaddr_pivot_remove(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry *); #ifndef SMALL_KERNEL vsize_t uaddr_pivot_random(void); -int uaddr_pivot_newpivot(struct vm_map*, - struct uaddr_pivot_state*, struct uaddr_pivot*, - struct vm_map_entry**, vaddr_t*, +int uaddr_pivot_newpivot(struct vm_map *, + struct uaddr_pivot_state *, struct uaddr_pivot *, + struct vm_map_entry **, vaddr_t *, vsize_t, vaddr_t, vaddr_t, vsize_t, vsize_t); #endif /* !SMALL_KERNEL */ #if defined(DEBUG) || defined(DDB) -void uaddr_pivot_print(struct uvm_addr_state*, boolean_t, - int (*)(const char*, ...)); -void uaddr_rnd_print(struct uvm_addr_state*, boolean_t, - int (*)(const char*, ...)); +void uaddr_pivot_print(struct uvm_addr_state *, boolean_t, + int (*)(const char *, ...)); +void uaddr_rnd_print(struct uvm_addr_state *, boolean_t, + int (*)(const char *, ...)); #endif /* DEBUG || DDB */ @@ -186,7 +186,7 @@ void uaddr_rnd_print(struct uvm_addr_state*, boolean_t, /* * Find smallest entry in tree that will fit sz bytes. */ -struct vm_map_entry* +struct vm_map_entry * uvm_addr_entrybyspace(struct uaddr_free_rbtree *free, vsize_t sz) { struct vm_map_entry *tmp, *res; @@ -278,7 +278,7 @@ uvm_addr_fitspace(vaddr_t *min_result, vaddr_t *max_result, * Initialize uvm_addr. */ void -uvm_addr_init() +uvm_addr_init(void) { pool_init(&uaddr_pool, sizeof(struct uvm_addr_state), 0, 0, 0, "uaddr", &pool_allocator_nointr); @@ -344,7 +344,7 @@ uvm_addr_align_back(vaddr_t addr, vaddr_t align, vaddr_t offset) */ int uvm_addr_linsearch(struct vm_map *map, struct uvm_addr_state *uaddr, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vaddr_t hint, vsize_t sz, vaddr_t align, vaddr_t offset, int direction, vaddr_t low, vaddr_t high, vsize_t before_gap, vsize_t after_gap) @@ -408,7 +408,7 @@ uvm_addr_linsearch(struct vm_map *map, struct uvm_addr_state *uaddr, */ int uvm_addr_invoke(struct vm_map *map, struct uvm_addr_state *uaddr, - struct vm_map_entry**entry_out, struct vm_map_entry**last_out, + struct vm_map_entry **entry_out, struct vm_map_entry **last_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { @@ -445,7 +445,7 @@ uvm_addr_invoke(struct vm_map *map, struct uvm_addr_state *uaddr, #if defined(DEBUG) || defined(DDB) void uvm_addr_print(struct uvm_addr_state *uaddr, const char *slot, boolean_t full, - int (*pr)(const char*, ...)) + int (*pr)(const char *, ...)) { if (uaddr == NULL) { (*pr)("- uvm_addr %s: NULL\n", slot); @@ -486,10 +486,10 @@ const struct uvm_addr_functions uaddr_lin_functions = { .uaddr_name = "uaddr_lin" }; -struct uvm_addr_state* +struct uvm_addr_state * uaddr_lin_create(vaddr_t minaddr, vaddr_t maxaddr) { - struct uvm_addr_state* uaddr; + struct uvm_addr_state *uaddr; uaddr = pool_get(&uaddr_pool, PR_WAITOK); uaddr->uaddr_minaddr = minaddr; @@ -500,7 +500,7 @@ uaddr_lin_create(vaddr_t minaddr, vaddr_t maxaddr) int uaddr_lin_select(struct vm_map *map, struct uvm_addr_state *uaddr, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { @@ -534,10 +534,10 @@ const struct uvm_addr_functions uaddr_rnd_functions = { .uaddr_name = "uaddr_rnd" }; -struct uvm_addr_state* +struct uvm_addr_state * uaddr_rnd_create(vaddr_t minaddr, vaddr_t maxaddr) { - struct uaddr_rnd_state* uaddr; + struct uaddr_rnd_state *uaddr; uaddr = pool_get(&uaddr_rnd_pool, PR_WAITOK); uaddr->ur_uaddr.uaddr_minaddr = minaddr; @@ -549,7 +549,7 @@ uaddr_rnd_create(vaddr_t minaddr, vaddr_t maxaddr) int uaddr_rnd_select(struct vm_map *map, struct uvm_addr_state *uaddr, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { @@ -561,7 +561,7 @@ uaddr_rnd_select(struct vm_map *map, struct uvm_addr_state *uaddr, vaddr_t tmp; KASSERT((map->flags & VM_MAP_ISVMSPACE) != 0); - vm = (struct vmspace*)map; + vm = (struct vmspace *)map; /* Deal with guardpages: search for space with one extra page. */ guard_sz = ((map->flags & VM_MAP_GUARDPAGES) == 0 ? 0 : PAGE_SIZE); @@ -687,7 +687,7 @@ uaddr_rnd_print(struct uvm_addr_state *uaddr_p, boolean_t full, size_t count; vsize_t space; - uaddr = (struct uaddr_rnd_state*)uaddr_p; + uaddr = (struct uaddr_rnd_state *)uaddr_p; addr = 0; count = 0; space = 0; @@ -733,10 +733,10 @@ const struct uvm_addr_functions uaddr_hint_functions = { /* * Create uaddr_hint state. */ -struct uvm_addr_state* +struct uvm_addr_state * uaddr_hint_create(vaddr_t minaddr, vaddr_t maxaddr, vsize_t max_dist) { - struct uaddr_hint_state* ua_hint; + struct uaddr_hint_state *ua_hint; KASSERT(uaddr_hint_pool.pr_size == sizeof(*ua_hint)); @@ -764,11 +764,12 @@ uaddr_hint_destroy(struct uvm_addr_state *uaddr) */ int uaddr_hint_select(struct vm_map *map, struct uvm_addr_state *uaddr_param, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { - struct uaddr_hint_state *uaddr = (struct uaddr_hint_state*)uaddr_param; + struct uaddr_hint_state *uaddr = + (struct uaddr_hint_state *)uaddr_param; vsize_t before_gap, after_gap; vaddr_t low, high; int dir; @@ -868,7 +869,7 @@ uaddr_kbootstrap_select(struct vm_map *map, struct uvm_addr_state *uaddr, void uaddr_kbootstrap_destroy(struct uvm_addr_state *uaddr) { - KASSERT(uaddr == (struct uvm_addr_state*)&uaddr_kbootstrap); + KASSERT(uaddr == (struct uvm_addr_state *)&uaddr_kbootstrap); } #ifndef SMALL_KERNEL @@ -884,7 +885,7 @@ const struct uvm_addr_functions uaddr_bestfit_functions = { .uaddr_name = "uaddr_bestfit" }; -struct uvm_addr_state* +struct uvm_addr_state * uaddr_bestfit_create(vaddr_t minaddr, vaddr_t maxaddr) { struct uaddr_bestfit_state *uaddr; @@ -910,7 +911,7 @@ uaddr_bestfit_insert(struct vm_map *map, struct uvm_addr_state *uaddr_p, struct uaddr_bestfit_state *uaddr; struct vm_map_entry *rb_rv; - uaddr = (struct uaddr_bestfit_state*)uaddr_p; + uaddr = (struct uaddr_bestfit_state *)uaddr_p; if ((rb_rv = RB_INSERT(uaddr_free_rbtree, &uaddr->ubf_free, entry)) != NULL) { panic("%s: duplicate insertion: state %p " @@ -925,14 +926,14 @@ uaddr_bestfit_remove(struct vm_map *map, struct uvm_addr_state *uaddr_p, { struct uaddr_bestfit_state *uaddr; - uaddr = (struct uaddr_bestfit_state*)uaddr_p; + uaddr = (struct uaddr_bestfit_state *)uaddr_p; if (RB_REMOVE(uaddr_free_rbtree, &uaddr->ubf_free, entry) != entry) panic("%s: entry was not in tree", __func__); } int uaddr_bestfit_select(struct vm_map *map, struct uvm_addr_state *uaddr_p, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { @@ -941,7 +942,7 @@ uaddr_bestfit_select(struct vm_map *map, struct uvm_addr_state *uaddr_p, struct vm_map_entry *entry; vsize_t guardsz; - uaddr = (struct uaddr_bestfit_state*)uaddr_p; + uaddr = (struct uaddr_bestfit_state *)uaddr_p; guardsz = ((map->flags & VM_MAP_GUARDPAGES) ? PAGE_SIZE : 0); /* @@ -1038,7 +1039,7 @@ uaddr_pivot_random() int uaddr_pivot_newpivot(struct vm_map *map, struct uaddr_pivot_state *uaddr, struct uaddr_pivot *pivot, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vsize_t before_gap, vsize_t after_gap) { @@ -1208,7 +1209,7 @@ uaddr_pivot_newpivot(struct vm_map *map, struct uaddr_pivot_state *uaddr, */ int uaddr_pivot_select(struct vm_map *map, struct uvm_addr_state *uaddr_p, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { @@ -1226,7 +1227,7 @@ uaddr_pivot_select(struct vm_map *map, struct uvm_addr_state *uaddr_p, /* * Select a random pivot and a random gap sizes around the allocation. */ - uaddr = (struct uaddr_pivot_state*)uaddr_p; + uaddr = (struct uaddr_pivot_state *)uaddr_p; pivot = &uaddr->up_pivots[ arc4random_uniform(nitems(uaddr->up_pivots))]; before_gap = uaddr_pivot_random(); @@ -1292,7 +1293,7 @@ uaddr_pivot_insert(struct vm_map *map, struct uvm_addr_state *uaddr_p, vaddr_t check_addr; vaddr_t start, end; - uaddr = (struct uaddr_pivot_state*)uaddr_p; + uaddr = (struct uaddr_pivot_state *)uaddr_p; if ((rb_rv = RB_INSERT(uaddr_free_rbtree, &uaddr->up_free, entry)) != NULL) { panic("%s: duplicate insertion: state %p " @@ -1332,7 +1333,7 @@ uaddr_pivot_remove(struct vm_map *map, struct uvm_addr_state *uaddr_p, struct uaddr_pivot_state *uaddr; struct uaddr_pivot *p; - uaddr = (struct uaddr_pivot_state*)uaddr_p; + uaddr = (struct uaddr_pivot_state *)uaddr_p; if (RB_REMOVE(uaddr_free_rbtree, &uaddr->up_free, entry) != entry) panic("%s: entry was not in tree", __func__); @@ -1358,7 +1359,7 @@ uaddr_pivot_remove(struct vm_map *map, struct uvm_addr_state *uaddr_p, * the next pivots will likely end up in different segments of free memory, * that was segmented by an earlier allocation; better spread. */ -struct uvm_addr_state* +struct uvm_addr_state * uaddr_pivot_create(vaddr_t minaddr, vaddr_t maxaddr) { struct uaddr_pivot_state *uaddr; @@ -1381,7 +1382,7 @@ uaddr_pivot_create(vaddr_t minaddr, vaddr_t maxaddr) */ void uaddr_pivot_print(struct uvm_addr_state *uaddr_p, boolean_t full, - int (*pr)(const char*, ...)) + int (*pr)(const char *, ...)) { struct uaddr_pivot_state *uaddr; struct uaddr_pivot *pivot; @@ -1389,7 +1390,7 @@ uaddr_pivot_print(struct uvm_addr_state *uaddr_p, boolean_t full, int i; vaddr_t check_addr; - uaddr = (struct uaddr_pivot_state*)uaddr_p; + uaddr = (struct uaddr_pivot_state *)uaddr_p; for (i = 0; i < NUM_PIVOTS; i++) { pivot = &uaddr->up_pivots[i]; @@ -1458,7 +1459,7 @@ const struct uvm_addr_functions uaddr_stack_brk_functions = { */ int uaddr_stack_brk_select(struct vm_map *map, struct uvm_addr_state *uaddr, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint) { @@ -1514,7 +1515,7 @@ uaddr_stack_brk_select(struct vm_map *map, struct uvm_addr_state *uaddr, return ENOMEM; } -struct uvm_addr_state* +struct uvm_addr_state * uaddr_stack_brk_create(vaddr_t minaddr, vaddr_t maxaddr) { struct uvm_addr_state* uaddr; diff --git a/sys/uvm/uvm_addr.h b/sys/uvm/uvm_addr.h index 5019523373c..e37751f8f57 100644 --- a/sys/uvm/uvm_addr.h +++ b/sys/uvm/uvm_addr.h @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_addr.h,v 1.2 2012/03/15 17:52:28 ariane Exp $ */ +/* $OpenBSD: uvm_addr.h,v 1.3 2014/06/10 20:08:48 kettenis Exp $ */ /* * Copyright (c) 2011 Ariane van der Steldt <ariane@stack.nl> @@ -56,7 +56,7 @@ struct uvm_addr_state { struct uvm_addr_functions { int (*uaddr_select)(struct vm_map *map, struct uvm_addr_state *uaddr, - struct vm_map_entry**entry_out, vaddr_t *addr_out, + struct vm_map_entry **entry_out, vaddr_t *addr_out, vsize_t sz, vaddr_t align, vaddr_t offset, vm_prot_t prot, vaddr_t hint); void (*uaddr_free_insert)(struct vm_map *map, @@ -67,7 +67,7 @@ struct uvm_addr_functions { struct vm_map_entry *entry); void (*uaddr_destroy)(struct uvm_addr_state *uaddr_state); void (*uaddr_print)(struct uvm_addr_state *uaddr_state, boolean_t full, - int (*pr)(const char*, ...)); + int (*pr)(const char *, ...)); const char* uaddr_name; /* Name of the allocator. */ }; @@ -76,17 +76,17 @@ struct uvm_addr_functions { #ifdef _KERNEL void uvm_addr_init(void); -void uvm_addr_destroy(struct uvm_addr_state*); +void uvm_addr_destroy(struct uvm_addr_state *); vaddr_t uvm_addr_align(vaddr_t, vaddr_t, vaddr_t); vaddr_t uvm_addr_align_back(vaddr_t, vaddr_t, vaddr_t); -int uvm_addr_linsearch(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, +int uvm_addr_linsearch(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, vaddr_t *addr_out, vaddr_t, vsize_t, vaddr_t, vaddr_t, int, vaddr_t, vaddr_t, vsize_t, vsize_t); -int uvm_addr_invoke(struct vm_map*, - struct uvm_addr_state*, struct vm_map_entry**, - struct vm_map_entry**, vaddr_t*, +int uvm_addr_invoke(struct vm_map *, + struct uvm_addr_state *, struct vm_map_entry **, + struct vm_map_entry **, vaddr_t*, vsize_t, vaddr_t, vaddr_t, vm_prot_t, vaddr_t); struct uvm_addr_state *uaddr_lin_create(vaddr_t, vaddr_t); struct uvm_addr_state *uaddr_rnd_create(vaddr_t, vaddr_t); @@ -96,13 +96,13 @@ struct uvm_addr_state *uaddr_bestfit_create(vaddr_t, vaddr_t); struct uvm_addr_state *uaddr_pivot_create(vaddr_t, vaddr_t); struct uvm_addr_state *uaddr_stack_brk_create(vaddr_t, vaddr_t); #endif /* SMALL_KERNEL */ -int uvm_addr_fitspace(vaddr_t*, vaddr_t*, +int uvm_addr_fitspace(vaddr_t *, vaddr_t *, vaddr_t, vaddr_t, vsize_t, vaddr_t, vaddr_t, vsize_t, vsize_t); #if defined(DEBUG) || defined(DDB) -void uvm_addr_print(struct uvm_addr_state*, const char*, - boolean_t, int (*pr)(const char*, ...)); +void uvm_addr_print(struct uvm_addr_state *, const char *, + boolean_t, int (*pr)(const char *, ...)); #endif /* DEBUG || DDB */ /* |