Lines Matching full:chunk
75 struct trampchunk *chunk; in kinst_trampchunk_alloc() local
93 * Allocate virtual memory for the trampoline chunk. The returned in kinst_trampchunk_alloc()
101 KINST_LOG("trampoline chunk allocation failed: %d", error); in kinst_trampchunk_alloc()
111 /* Allocate a tracker for this chunk. */ in kinst_trampchunk_alloc()
112 chunk = malloc(sizeof(*chunk), M_KINST, M_WAITOK); in kinst_trampchunk_alloc()
113 chunk->addr = (void *)trampaddr; in kinst_trampchunk_alloc()
114 BIT_FILL(KINST_TRAMPS_PER_CHUNK, &chunk->free); in kinst_trampchunk_alloc()
116 TAILQ_INSERT_HEAD(&kinst_trampchunks, chunk, next); in kinst_trampchunk_alloc()
118 return (chunk); in kinst_trampchunk_alloc()
122 kinst_trampchunk_free(struct trampchunk *chunk) in kinst_trampchunk_free() argument
126 TAILQ_REMOVE(&kinst_trampchunks, chunk, next); in kinst_trampchunk_free()
127 kmem_unback(kernel_object, (vm_offset_t)chunk->addr, in kinst_trampchunk_free()
129 (void)vm_map_remove(kernel_map, (vm_offset_t)chunk->addr, in kinst_trampchunk_free()
130 (vm_offset_t)(chunk->addr + KINST_TRAMPCHUNK_SIZE)); in kinst_trampchunk_free()
131 free(chunk, M_KINST); in kinst_trampchunk_free()
137 struct trampchunk *chunk; in kinst_trampoline_alloc_locked() local
143 TAILQ_FOREACH(chunk, &kinst_trampchunks, next) { in kinst_trampoline_alloc_locked()
144 /* All trampolines from this chunk are already allocated. */ in kinst_trampoline_alloc_locked()
145 if ((off = BIT_FFS(KINST_TRAMPS_PER_CHUNK, &chunk->free)) == 0) in kinst_trampoline_alloc_locked()
151 if (chunk == NULL) { in kinst_trampoline_alloc_locked()
155 if ((chunk = kinst_trampchunk_alloc()) == NULL) { in kinst_trampoline_alloc_locked()
176 BIT_CLR(KINST_TRAMPS_PER_CHUNK, off, &chunk->free); in kinst_trampoline_alloc_locked()
177 tramp = chunk->addr + off * KINST_TRAMP_SIZE; in kinst_trampoline_alloc_locked()
195 struct trampchunk *chunk; in kinst_trampoline_dealloc_locked() local
203 TAILQ_FOREACH(chunk, &kinst_trampchunks, next) { in kinst_trampoline_dealloc_locked()
205 if (chunk->addr + off * KINST_TRAMP_SIZE == tramp) { in kinst_trampoline_dealloc_locked()
208 &chunk->free); in kinst_trampoline_dealloc_locked()
211 &chunk->free)) in kinst_trampoline_dealloc_locked()
212 kinst_trampchunk_free(chunk); in kinst_trampoline_dealloc_locked()
217 panic("%s: did not find trampoline chunk for %p", __func__, tramp); in kinst_trampoline_dealloc_locked()
322 struct trampchunk *chunk, *tmp; in kinst_trampoline_deinit() local
341 TAILQ_FOREACH_SAFE(chunk, &kinst_trampchunks, next, tmp) in kinst_trampoline_deinit()
342 kinst_trampchunk_free(chunk); in kinst_trampoline_deinit()
345 struct trampchunk *chunk, *tmp; in kinst_trampoline_deinit()
348 TAILQ_FOREACH_SAFE(chunk, &kinst_trampchunks, next, tmp) in kinst_trampoline_deinit()
349 kinst_trampchunk_free(chunk); in kinst_trampoline_deinit()