This patch Reviewed-by: Petri Savolainen <petri.savolai...@nokia.com>
> -----Original Message----- > From: Christophe Milard [mailto:christophe.mil...@linaro.org] > Sent: Friday, December 30, 2016 1:59 PM > To: francois.o...@linaro.org; forrest....@linaro.org; > mike.hol...@linaro.org; yi...@linaro.org; bill.fischo...@linaro.org; > Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia-bell- > labs.com>; lng-odp@lists.linaro.org > Cc: Christophe Milard <christophe.mil...@linaro.org> > Subject: [API-NEXT PATCHv3 2/6] drv: adding odpdrv_shm_pool functions > > Adding functions to create and destroy memory pools (from which memory > can be allocated and freed) are added. > These functions enable the usage of small memory amount (compared to > drvshm_reserve() whose granularity is the page size). > The usage of this pool guatantees that allocated memory is sharable > between ODP threads. (using malloc would not work when ODP threads > are linux processes). > > Signed-off-by: Christophe Milard <christophe.mil...@linaro.org> > --- > include/odp/drv/spec/shm.h | 94 > ++++++++++++++++++++++ > .../linux-generic/include/odp/drv/plat/shm_types.h | 3 + > 2 files changed, 97 insertions(+) > > diff --git a/include/odp/drv/spec/shm.h b/include/odp/drv/spec/shm.h > index ef64f5d..64124c0 100644 > --- a/include/odp/drv/spec/shm.h > +++ b/include/odp/drv/spec/shm.h > @@ -220,6 +220,100 @@ int odpdrv_shm_print_all(const char *title); > uint64_t odpdrv_shm_to_u64(odpdrv_shm_t hdl); > > /** > + * drv shm pool parameters > + * Used to communicate pool creation options. > + */ > +typedef struct { > + /** Sum of all (simultaneous) allocs (bytes)*/ > + uint64_t pool_size; > + > + /** Minimum alloc size user will request from pool (bytes)*/ > + uint64_t min_alloc; > + > + /** Maximum alloc size user will request from pool (bytes)*/ > + uint64_t max_alloc; > +} odpdrv_shm_pool_param_t; > + > +/** > + * @typedef odpdrv_shm_pool_t > + * odpdrv shared memory pool > + */ > + > +/** > + * Create a memory pool > + * > + * This routine is used to create a memory pool. The use of pool name is > + * optional. > + * Unique names are not required. However, odpdrv_shm_pool_lookup() > + * returns only a single matching pool. > + * > + * @param name Name of the pool or NULL. > + * @param param Pool parameters. > + * > + * @return Handle of the created drv shm memory pool > + * @retval ODPDRV_SHM_POOL_INVALID Pool could not be created > + */ > +odpdrv_shm_pool_t odpdrv_shm_pool_create(const char *pool_name, > + odpdrv_shm_pool_param_t *param); > + > +/** > + * Destroy a pool previously created by odpdrv_shm_pool_create() > + * > + * @param pool Handle of the pool to be destroyed > + * > + * @retval 0 Success > + * @retval <0 Failure > + * > + * @note This routine destroys a previously created pool, and will > destroy any > + * internal shared memory objects associated with the pool. Results are > + * undefined if an attempt is made to destroy a pool that contains > allocated > + * or otherwise active allocations. > + */ > +int odpdrv_shm_pool_destroy(odpdrv_shm_pool_t pool); > + > +/** > + * Find a memory pool by name > + * > + * @param name Name of the pool > + * > + * @return Handle of the first matching pool > + * @retval ODPDRV_SHM_POOL_INVALID Pool could not be found > + */ > +odpdrv_shm_pool_t odpdrv_shm_pool_lookup(const char *name); > + > +/** > + * Allocate memory from a memory pool > + * > + * @param pool Memory pool handle > + * @param size Number of bytes to allocate (bytes) > + * > + * @return A pointer to the allocated memory > + * @retval NULL on error. > + */ > +void *odpdrv_shm_pool_alloc(odpdrv_shm_pool_t pool, uint64_t size); > + > +/** > + * Free memory back to a memory pool > + * > + * @param pool Memory pool handle > + * @param addr pointer to a previously allocated memory > + * (as returned by a previous call to odpdrv_shm_pool_alloc) > + */ > +void odpdrv_shm_pool_free(odpdrv_shm_pool_t pool, void *addr); > + > +/** > + * Print memory pool info > + * > + * @param title A string to be printed as a title (e.g. location) > + * @param pool Memory pool handle > + * > + * @return 0 on success, negative value if pool inconsistency is > detected. > + * > + * @note This routine writes implementation-defined information about the > + * specified pool to the ODP log. The intended use is for debugging. > + */ > +int odpdrv_shm_pool_print(const char *title, odpdrv_shm_pool_t pool); > +/** > * @} > */ > > diff --git a/platform/linux-generic/include/odp/drv/plat/shm_types.h > b/platform/linux-generic/include/odp/drv/plat/shm_types.h > index c48eeca..50a0837 100644 > --- a/platform/linux-generic/include/odp/drv/plat/shm_types.h > +++ b/platform/linux-generic/include/odp/drv/plat/shm_types.h > @@ -35,6 +35,9 @@ static inline uint64_t odpdrv_shm_to_u64(odpdrv_shm_t > hdl) > return _odpdrv_pri(hdl); > } > > +typedef ODPDRV_HANDLE_T(odpdrv_shm_pool_t); > + > +#define ODPDRV_SHM_POOL_INVALID _odpdrv_cast_scalar(odpdrv_shm_pool_t, > NULL) > /** > * @} > */ > -- > 2.7.4