diff --git a/kernel/mem_slab.c b/kernel/mem_slab.c index 8efcd156420..7e3765dd372 100644 --- a/kernel/mem_slab.c +++ b/kernel/mem_slab.c @@ -33,6 +33,11 @@ static void create_free_list(struct k_mem_slab *slab) u32_t j; char *p; + /* blocks must be word aligned */ + __ASSERT(((slab->block_size | (uintptr_t)slab->buffer) + & (sizeof(void *) - 1)) == 0, + "slab at %p not word aligned", slab); + slab->free_list = NULL; p = slab->buffer; @@ -68,10 +73,6 @@ SYS_INIT(init_mem_slab_module, PRE_KERNEL_1, void k_mem_slab_init(struct k_mem_slab *slab, void *buffer, size_t block_size, u32_t num_blocks) { - /* block size must be word aligned */ - __ASSERT((slab->block_size & (sizeof(void *) - 1)) == 0, - "block size not word aligned"); - slab->num_blocks = num_blocks; slab->block_size = block_size; slab->buffer = buffer; @@ -88,10 +89,6 @@ int k_mem_slab_alloc(struct k_mem_slab *slab, void **mem, s32_t timeout) k_spinlock_key_t key = k_spin_lock(&lock); int result; - /* block size must be word aligned */ - __ASSERT((slab->block_size & (sizeof(void *) - 1)) == 0, - "block size not word aligned"); - if (slab->free_list != NULL) { /* take a free block */ *mem = slab->free_list;