From 08ee8b09baae7a2c57013049b3affe7a3b42b02f Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Wed, 26 Jun 2019 10:33:47 -0400 Subject: [PATCH] cleanup: include/: move misc/mempool.h to sys/mempool.h move misc/mempool.h to sys/mempool.h and create a shim for backward-compatibility. No functional changes to the headers. A warning in the shim can be controlled with CONFIG_COMPAT_INCLUDES. Related to #16539 Signed-off-by: Anas Nashif --- include/misc/mempool.h | 100 ++--------------- include/sys/mempool.h | 101 ++++++++++++++++++ lib/gui/lvgl/lvgl_mem_kernel.c | 2 +- lib/gui/lvgl/lvgl_mem_user.c | 2 +- lib/libc/minimal/source/stdlib/malloc.c | 2 +- lib/os/mempool.c | 2 +- tests/kernel/mem_pool/sys_mem_pool/src/main.c | 2 +- 7 files changed, 113 insertions(+), 98 deletions(-) create mode 100644 include/sys/mempool.h diff --git a/include/misc/mempool.h b/include/misc/mempool.h index 1cdf7a0c85e..dec93231723 100644 --- a/include/misc/mempool.h +++ b/include/misc/mempool.h @@ -1,101 +1,15 @@ /* - * Copyright (c) 2018 Intel Corporation + * Copyright (c) 2019 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ - #ifndef ZEPHYR_INCLUDE_MISC_MEMPOOL_H_ #define ZEPHYR_INCLUDE_MISC_MEMPOOL_H_ -#include -#include -#include - -struct sys_mem_pool { - struct sys_mem_pool_base base; - struct sys_mutex mutex; -}; - -struct sys_mem_pool_block { - struct sys_mem_pool *pool; - u32_t level : 4; - u32_t block : 28; -}; - -/** - * @brief Statically define system memory pool - * - * The memory pool's buffer contains @a n_max blocks that are @a max_size bytes - * long. The memory pool allows blocks to be repeatedly partitioned into - * quarters, down to blocks of @a min_size bytes long. The buffer is aligned - * to a @a align -byte boundary. - * - * If the pool is to be accessed outside the module where it is defined, it - * can be declared via - * - * @code extern struct sys_mem_pool ; @endcode - * - * This pool will not be in an initialized state. You will still need to - * run sys_mem_pool_init() on it before using any other APIs. - * - * @param name Name of the memory pool. - * @param ignored ignored, any value - * @param minsz Size of the smallest blocks in the pool (in bytes). - * @param maxsz Size of the largest blocks in the pool (in bytes). - * @param nmax Number of maximum sized blocks in the pool. - * @param align Alignment of the pool's buffer (power of 2). - * @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 \ - + _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), \ - .n_max = nmax, \ - .n_levels = Z_MPOOL_LVLS(maxsz, minsz), \ - .levels = _mpool_lvls_##name, \ - .flags = SYS_MEM_POOL_USER \ - } \ - } - -/** - * @brief Initialize a memory pool - * - * This is intended to complete initialization of memory pools that have been - * declared with SYS_MEM_POOL_DEFINE(). - * - * @param p Memory pool to initialize - */ -static inline void sys_mem_pool_init(struct sys_mem_pool *p) -{ - z_sys_mem_pool_base_init(&p->base); -} - -/** - * @brief Allocate a block of memory - * - * Allocate a chunk of memory from a memory pool. This cannot be called from - * interrupt context. - * - * @param p Address of the memory pool - * @param size Requested size of the memory block - * @return A pointer to the requested memory, or NULL if none is available - */ -void *sys_mem_pool_alloc(struct sys_mem_pool *p, size_t size); - -/** - * @brief Free memory allocated from a memory pool - * - * Free memory previously allocated by sys_mem_pool_alloc(). - * It is safe to pass NULL to this function, in which case it is a no-op. - * - * @param ptr Pointer to previously allocated memory - */ -void sys_mem_pool_free(void *ptr); - +#ifndef CONFIG_COMPAT_INCLUDES +#warning "This header file has moved, include instead." #endif + +#include + +#endif /* ZEPHYR_INCLUDE_MISC_MEMPOOL_H_ */ diff --git a/include/sys/mempool.h b/include/sys/mempool.h new file mode 100644 index 00000000000..7df0b40833f --- /dev/null +++ b/include/sys/mempool.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2018 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_SYS_MEMPOOL_H_ +#define ZEPHYR_INCLUDE_SYS_MEMPOOL_H_ + +#include +#include +#include + +struct sys_mem_pool { + struct sys_mem_pool_base base; + struct sys_mutex mutex; +}; + +struct sys_mem_pool_block { + struct sys_mem_pool *pool; + u32_t level : 4; + u32_t block : 28; +}; + +/** + * @brief Statically define system memory pool + * + * The memory pool's buffer contains @a n_max blocks that are @a max_size bytes + * long. The memory pool allows blocks to be repeatedly partitioned into + * quarters, down to blocks of @a min_size bytes long. The buffer is aligned + * to a @a align -byte boundary. + * + * If the pool is to be accessed outside the module where it is defined, it + * can be declared via + * + * @code extern struct sys_mem_pool ; @endcode + * + * This pool will not be in an initialized state. You will still need to + * run sys_mem_pool_init() on it before using any other APIs. + * + * @param name Name of the memory pool. + * @param ignored ignored, any value + * @param minsz Size of the smallest blocks in the pool (in bytes). + * @param maxsz Size of the largest blocks in the pool (in bytes). + * @param nmax Number of maximum sized blocks in the pool. + * @param align Alignment of the pool's buffer (power of 2). + * @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 \ + + _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), \ + .n_max = nmax, \ + .n_levels = Z_MPOOL_LVLS(maxsz, minsz), \ + .levels = _mpool_lvls_##name, \ + .flags = SYS_MEM_POOL_USER \ + } \ + } + +/** + * @brief Initialize a memory pool + * + * This is intended to complete initialization of memory pools that have been + * declared with SYS_MEM_POOL_DEFINE(). + * + * @param p Memory pool to initialize + */ +static inline void sys_mem_pool_init(struct sys_mem_pool *p) +{ + z_sys_mem_pool_base_init(&p->base); +} + +/** + * @brief Allocate a block of memory + * + * Allocate a chunk of memory from a memory pool. This cannot be called from + * interrupt context. + * + * @param p Address of the memory pool + * @param size Requested size of the memory block + * @return A pointer to the requested memory, or NULL if none is available + */ +void *sys_mem_pool_alloc(struct sys_mem_pool *p, size_t size); + +/** + * @brief Free memory allocated from a memory pool + * + * Free memory previously allocated by sys_mem_pool_alloc(). + * It is safe to pass NULL to this function, in which case it is a no-op. + * + * @param ptr Pointer to previously allocated memory + */ +void sys_mem_pool_free(void *ptr); + +#endif diff --git a/lib/gui/lvgl/lvgl_mem_kernel.c b/lib/gui/lvgl/lvgl_mem_kernel.c index 52030f94e68..54722ac147c 100644 --- a/lib/gui/lvgl/lvgl_mem_kernel.c +++ b/lib/gui/lvgl/lvgl_mem_kernel.c @@ -7,7 +7,7 @@ #include "lvgl_mem.h" #include #include -#include +#include K_MEM_POOL_DEFINE(lvgl_mem_pool, CONFIG_LVGL_MEM_POOL_MIN_SIZE, diff --git a/lib/gui/lvgl/lvgl_mem_user.c b/lib/gui/lvgl/lvgl_mem_user.c index 0deefabf858..fc7714a11b8 100644 --- a/lib/gui/lvgl/lvgl_mem_user.c +++ b/lib/gui/lvgl/lvgl_mem_user.c @@ -7,7 +7,7 @@ #include "lvgl_mem.h" #include #include -#include +#include SYS_MEM_POOL_DEFINE(lvgl_mem_pool, NULL, CONFIG_LVGL_MEM_POOL_MIN_SIZE, diff --git a/lib/libc/minimal/source/stdlib/malloc.c b/lib/libc/minimal/source/stdlib/malloc.c index ce3070c1154..39a7c17a28b 100644 --- a/lib/libc/minimal/source/stdlib/malloc.c +++ b/lib/libc/minimal/source/stdlib/malloc.c @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include #include diff --git a/lib/os/mempool.c b/lib/os/mempool.c index b5fa816fdaf..4184639330d 100644 --- a/lib/os/mempool.c +++ b/lib/os/mempool.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include #ifdef CONFIG_MISRA_SANE #define LVL_ARRAY_SZ(n) (8 * sizeof(void *) / 2) diff --git a/tests/kernel/mem_pool/sys_mem_pool/src/main.c b/tests/kernel/mem_pool/sys_mem_pool/src/main.c index 83990a8f9ef..7d79e5b43a3 100644 --- a/tests/kernel/mem_pool/sys_mem_pool/src/main.c +++ b/tests/kernel/mem_pool/sys_mem_pool/src/main.c @@ -5,7 +5,7 @@ */ #include -#include +#include #define BLK_SIZE_MIN 256