Allocator API
enum alloc_flags { ALLOC_FLAG_PREFER_CACHE_ALIGNED = (1 << 0), ALLOC_FLAG_NO_CACHE_ALIGN = 0, ALLOC_FLAG_FLEXIBLE_LOCALITY = (1 << 1), ALLOC_FLAG_STRICT_LOCALITY = 0, ALLOC_FLAG_PAGEABLE = (1 << 2), ALLOC_FLAG_NONPAGEABLE = 0, ALLOC_FLAG_MOVABLE = (1 << 3), ALLOC_FLAG_NONMOVABLE = 0, ALLOC_FLAG_CLASS_DEFAULT = (1 << ALLOC_CLASS_SHIFT), ALLOC_FLAG_CLASS_INTERLEAVED = (2 << ALLOC_CLASS_SHIFT), ALLOC_FLAG_CLASS_HIGH_BANDWIDTH = (3 << ALLOC_CLASS_SHIFT),};enum alloc_behavior { ALLOC_BEHAVIOR_NORMAL, ALLOC_BEHAVIOR_ATOMIC, ALLOC_BEHAVIOR_NO_WAIT, ALLOC_BEHAVIOR_NO_RECLAIM, ALLOC_BEHAVIOR_FAULT_SAFE, ALLOC_BEHAVIOR_FLAG_FAST = 1 << ALLOC_BEHAVIOR_FLAG_SHIFT, ALLOC_BEHAVIOR_FLAG_MINIMAL = 1 << (ALLOC_BEHAVIOR_FLAG_SHIFT + 1),};bool alloc_flags_valid(enum alloc_flags flags);alloc_flags_valid referenced types:
enum alloc_behavior alloc_behavior_base(enum alloc_behavior raw);alloc_behavior_base referenced types:
bool alloc_behavior_may_fault(enum alloc_behavior raw);alloc_behavior_may_fault referenced types:
bool alloc_behavior_may_block(enum alloc_behavior raw);alloc_behavior_may_block referenced types:
bool alloc_behavior_is_isr_safe(enum alloc_behavior raw);alloc_behavior_is_isr_safe referenced types:
bool alloc_behavior_no_reclaim(enum alloc_behavior raw);alloc_behavior_no_reclaim referenced types:
bool alloc_behavior_is_fast(enum alloc_behavior raw);alloc_behavior_is_fast referenced types:
bool alloc_flag_behavior_verify(enum alloc_flags f, enum alloc_behavior behavior);alloc_flag_behavior_verify referenced types:
void alloc_request_sanitize(enum alloc_flags *f, enum alloc_behavior *b);alloc_request_sanitize referenced types:
void * kmalloc_new(size_t size, enum alloc_flags flags, enum alloc_behavior behavior);kmalloc_new referenced types:
void kfree_new(void *ptr, enum alloc_behavior behavior);kfree_new referenced types:
void * kmalloc_from_domain(size_t domain, size_t size);void * kmalloc_internal(size_t size, enum alloc_flags flags, enum alloc_behavior behavior);kmalloc_internal referenced types:
void * krealloc_internal(void *ptr, size_t size, enum alloc_flags flags, enum alloc_behavior behavior);krealloc_internal referenced types:
void * kzalloc_internal(size_t size, enum alloc_flags flags, enum alloc_behavior behavior);kzalloc_internal referenced types:
void kfree_internal(void *ptr, enum alloc_behavior behavior);kfree_internal referenced types:
size_t ksize(void *ptr);void * kmalloc_aligned_internal(size_t size, size_t align, enum alloc_flags flags, enum alloc_behavior behavior);kmalloc_aligned_internal referenced types:
void * kzalloc_aligned_internal(size_t size, size_t align, enum alloc_flags flags, enum alloc_behavior behavior);kzalloc_aligned_internal referenced types:
void kfree_aligned_internal(void *ptr, enum alloc_behavior behavior);kfree_aligned_internal referenced types:
Defines
Section titled “Defines”#define ALLOC_LOCALITY_SHIFT 9#define ALLOC_CLASS_SHIFT 12#define ALLOC_CLASS_MASK 0xF#define ALLOC_LOCALITY_MAX 7#define ALLOC_LOCALITY_MIN 0#define ALLOC_LOCALITY_MASK 0x7#define ALLOC_LOCALITY_FROM_FLAGS(flags) \ (((flags) >> ALLOC_LOCALITY_SHIFT) & ALLOC_LOCALITY_MASK)#define ALLOC_LOCALITY_TO_FLAGS(locality) \ (((locality) & ALLOC_LOCALITY_MASK) << ALLOC_LOCALITY_SHIFT)#define ALLOC_FLAG_TEST(flags, mask) (flags & mask)#define ALLOC_FLAG_CLASS(flags) \ ((flags >> ALLOC_CLASS_SHIFT) & ALLOC_CLASS_MASK)#define ALLOC_FLAGS_UNAVAILABLE_BITS 0x70#define ALLOC_FLAGS_DEFAULT \ (ALLOC_FLAG_CLASS_DEFAULT | ALLOC_FLAG_FLEXIBLE_LOCALITY | \ ALLOC_FLAG_NONMOVABLE | ALLOC_FLAG_NONPAGEABLE | \ ALLOC_FLAG_NO_CACHE_ALIGN | ALLOC_LOCALITY_TO_FLAGS(ALLOC_LOCALITY_MIN))#define ALLOC_FLAGS_PAGEABLE \ ALLOC_FLAG_PAGEABLE | ALLOC_FLAG_CLASS_DEFAULT | \ ALLOC_FLAG_FLEXIBLE_LOCALITY#define ALLOC_BEHAVIOR_FLAG_SHIFT 4#define ALLOC_BEHAVIOR_MASK (0xF)#define ALLOC_BEHAVIOR_AVAILABLE_SHIFT 12#define ALLOC_BEHAVIOR_DEFAULT ALLOC_BEHAVIOR_NORMAL