void *lmm_alloc_aligned(lmm_t *lmm, int size, lmm_flags_t flags, int align_bits, unsigned int align_ofs) { return lmm_alloc_gen(lmm, size, flags, align_bits, align_ofs, 0, -1); }
/* Remove any memory in the specified range from the free memory list. */ void malloc_reserve(vm_offset_t rstart, vm_offset_t rend) { /*printf("malloc_reserve %08x-%08x\n", rstart, rend);*/ while (rstart < rend) { vm_offset_t size; lmm_flags_t flags; void *ptr; /*printf("lmm_find_free %08x ", rstart);*/ lmm_find_free(&malloc_lmm, &rstart, &size, &flags); /*printf(" returned %08x-%08x (size %08x) flags %08x\n", rstart, rstart+size, size, flags);*/ if ((size == 0) || (rstart >= rend)) break; if (rstart + size > rend) size = rend - rstart; /*printf("reserving %08x-%08x\n", rstart, rstart+size);*/ ptr = lmm_alloc_gen(&malloc_lmm, size, flags, 0, 0, rstart, size); assert((vm_offset_t)ptr == rstart); } }
void lmm_remove_free(lmm_t *lmm, void *block, oskit_size_t block_size) { oskit_addr_t rstart = (oskit_addr_t)block; oskit_addr_t rend = rstart + block_size; assert(rend > rstart); while (rstart < rend) { oskit_addr_t size; lmm_flags_t flags; void *ptr; lmm_find_free(lmm, &rstart, &size, &flags); assert(rstart >= (oskit_addr_t)block); if ((size == 0) || (rstart >= rend)) break; if (rstart + size > rend) size = rend - rstart; ptr = lmm_alloc_gen(lmm, size, flags, 0, 0, rstart, size); assert((oskit_addr_t)ptr == rstart); } }
void *lmm_alloc_page(lmm_t *lmm, lmm_flags_t flags) { return lmm_alloc_gen(lmm, PAGE_SIZE, flags, PAGE_SHIFT, 0, (vm_offset_t)0, (vm_size_t)-1); }
void *lmm_alloc_page(lmm_t *lmm, lmm_flags_t flags) { return lmm_alloc_gen(lmm, PAGE_SIZE, flags, PAGE_SHIFT, 0, 0, -1); }