/* * vmem_aligned_alloc -- allocate aligned memory */ void * vmem_aligned_alloc(VMEM *vmp, size_t alignment, size_t size) { LOG(3, "vmp %p alignment %zu size %zu", vmp, alignment, size); return je_vmem_pool_aligned_alloc( (pool_t *)((uintptr_t)vmp + Header_size), alignment, size); }
void * memalign(size_t boundary, size_t size) { if (Vmp == NULL) { ASSERT(size <= HUGE); return je_vmem_memalign(boundary, size); } LOG(4, "boundary %zu size %zu", boundary, size); return je_vmem_pool_aligned_alloc( (pool_t *)((uintptr_t)Vmp + Header_size), boundary, size); }
void * pvalloc(size_t size) { ASSERTne(Pagesize, 0); if (Vmp == NULL) { ASSERT(size <= HUGE); return je_vmem_valloc(roundup(size, Pagesize)); } LOG(4, "size %zu", size); return je_vmem_pool_aligned_alloc( (pool_t *)((uintptr_t)Vmp + Header_size), Pagesize, roundup(size, Pagesize)); }
void * aligned_alloc(size_t alignment, size_t size) { /* XXX - check if size is a multiple of alignment */ if (Vmp == NULL) { ASSERT(size <= HUGE); return je_vmem_memalign(alignment, size); } LOG(4, "alignment %zu size %zu", alignment, size); return je_vmem_pool_aligned_alloc( (pool_t *)((uintptr_t)Vmp + Header_size), alignment, size); }
int posix_memalign(void **memptr, size_t alignment, size_t size) { int ret = 0; int oerrno = errno; if (Vmp == NULL) { ASSERT(size <= HUGE); *memptr = je_vmem_memalign(alignment, size); if (*memptr == NULL) ret = errno; errno = oerrno; return ret; } LOG(4, "alignment %zu size %zu", alignment, size); *memptr = je_vmem_pool_aligned_alloc( (pool_t *)((uintptr_t)Vmp + Header_size), alignment, size); if (*memptr == NULL) ret = errno; errno = oerrno; return ret; }