mempool: make alignment/rounding 64-bit compatible
Minimum alignment and rounding must be done on a word boundary. Let's replace _ALIGN4() with WB_UP() which is equivalent on 32-bit targets, and 64-bit aware. Also enforce a minimal alignment on the memory pool. This is making a difference mostly on64-bit targets where the widely used 4-byte alignment is not sufficient. The _ALIGN4() macro has no users left so it is removed. Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
This commit is contained in:
parent
d62e229680
commit
cf974371fb
5 changed files with 9 additions and 11 deletions
|
@ -47,15 +47,15 @@ struct sys_mem_pool_block {
|
|||
* @param section Destination binary section for pool data
|
||||
*/
|
||||
#define SYS_MEM_POOL_DEFINE(name, ignored, minsz, maxsz, nmax, align, section) \
|
||||
char __aligned(align) Z_GENERIC_SECTION(section) \
|
||||
_mpool_buf_##name[_ALIGN4(maxsz) * nmax \
|
||||
char __aligned(WB_UP(align)) Z_GENERIC_SECTION(section) \
|
||||
_mpool_buf_##name[WB_UP(maxsz) * nmax \
|
||||
+ _MPOOL_BITS_SIZE(maxsz, minsz, nmax)]; \
|
||||
struct sys_mem_pool_lvl Z_GENERIC_SECTION(section) \
|
||||
_mpool_lvls_##name[Z_MPOOL_LVLS(maxsz, minsz)]; \
|
||||
Z_GENERIC_SECTION(section) struct sys_mem_pool name = { \
|
||||
.base = { \
|
||||
.buf = _mpool_buf_##name, \
|
||||
.max_sz = _ALIGN4(maxsz), \
|
||||
.max_sz = WB_UP(maxsz), \
|
||||
.n_max = nmax, \
|
||||
.n_levels = Z_MPOOL_LVLS(maxsz, minsz), \
|
||||
.levels = _mpool_lvls_##name, \
|
||||
|
|
|
@ -36,8 +36,6 @@ struct sys_mem_pool_base {
|
|||
u8_t flags;
|
||||
};
|
||||
|
||||
#define _ALIGN4(n) ((((n)+3)/4)*4)
|
||||
|
||||
#define Z_MPOOL_HAVE_LVL(maxsz, minsz, l) (((maxsz) >> (2*(l))) \
|
||||
>= (minsz) ? 1 : 0)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue