From 46cd5a033073e9383a6ae1b348b28d0cdae85ef6 Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Tue, 21 May 2019 21:40:38 -0400 Subject: [PATCH] mem_slab: enforce minimum alignment on statically allocated slabs There is no point allowing smaller alignments. And on 64-bit systems the minimum becomes 8 rather than 4, so let's adjust things automatically. Signed-off-by: Nicolas Pitre --- include/kernel.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/kernel.h b/include/kernel.h index 3cd937963eb..d0121a9a88a 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -3912,11 +3912,11 @@ struct k_mem_slab { * @req K-MSLAB-001 */ #define K_MEM_SLAB_DEFINE(name, slab_block_size, slab_num_blocks, slab_align) \ - char __noinit __aligned(slab_align) \ - _k_mem_slab_buf_##name[(slab_num_blocks) * (slab_block_size)]; \ + char __noinit __aligned(WB_UP(slab_align)) \ + _k_mem_slab_buf_##name[(slab_num_blocks) * WB_UP(slab_block_size)]; \ Z_STRUCT_SECTION_ITERABLE(k_mem_slab, name) = \ _K_MEM_SLAB_INITIALIZER(name, _k_mem_slab_buf_##name, \ - slab_block_size, slab_num_blocks) + WB_UP(slab_block_size), slab_num_blocks) /** * @brief Initialize a memory slab. @@ -3925,7 +3925,8 @@ struct k_mem_slab { * * The memory slab's buffer contains @a slab_num_blocks memory blocks * that are @a slab_block_size bytes long. The buffer must be aligned to an - * N-byte boundary, where N is a power of 2 larger than 2 (i.e. 4, 8, 16, ...). + * N-byte boundary matching a word boundary, where N is a power of 2 + * (i.e. 4 on 32-bit systems, 8, 16, ...). * To ensure that each memory block is similarly aligned to this boundary, * @a slab_block_size must also be a multiple of N. *