env: add spdk_mempool_create_ctor

Change-Id: I8b70d25d1b245bdb3f6fcd79599a2907a6d5bddc
Signed-off-by: Ziye Yang <optimistyzy@gmail.com>
Reviewed-on: https://review.gerrithub.io/391143
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Ziye Yang 2017-12-11 12:37:27 +08:00 committed by Ben Walker
parent 2a4d18e391
commit c127a23690
2 changed files with 35 additions and 3 deletions

View File

@ -154,6 +154,28 @@ struct spdk_mempool;
struct spdk_mempool *spdk_mempool_create(const char *name, size_t count,
size_t ele_size, size_t cache_size, int socket_id);
/**
* An object callback function for mempool.
*
* Used by spdk_mempool_create_ctor
*/
typedef void (spdk_mempool_obj_cb_t)(struct spdk_mempool *mp,
void *opaque, void *obj, unsigned obj_idx);
/**
* Create a thread-safe memory pool with user provided initialization function and argument.
*
* \param cache_size How many elements may be cached in per-core caches. Use
* SPDK_MEMPOOL_DEFAULT_CACHE_SIZE for a reasonable default, or 0 for no
* per-core cache.
* \param socket_id Socket ID to allocate memory on, or SPDK_ENV_SOCKET_ID_ANY for any socket.
* \param obj_init User provided object calll back initialization function.
* \paam obj_init_arg User provided callback initialization function argument.
*/
struct spdk_mempool *spdk_mempool_create_ctor(const char *name, size_t count,
size_t ele_size, size_t cache_size, int socket_id,
spdk_mempool_obj_cb_t *obj_init, void *obj_init_arg);
/**
* Get the name of a mempool
*/

View File

@ -150,8 +150,9 @@ spdk_memzone_dump(FILE *f)
}
struct spdk_mempool *
spdk_mempool_create(const char *name, size_t count,
size_t ele_size, size_t cache_size, int socket_id)
spdk_mempool_create_ctor(const char *name, size_t count,
size_t ele_size, size_t cache_size, int socket_id,
spdk_mempool_obj_cb_t *obj_init, void *obj_init_arg)
{
struct rte_mempool *mp;
size_t tmp;
@ -171,12 +172,21 @@ spdk_mempool_create(const char *name, size_t count,
}
mp = rte_mempool_create(name, count, ele_size, cache_size,
0, NULL, NULL, NULL, NULL,
0, NULL, NULL, (rte_mempool_obj_cb_t *)obj_init, obj_init_arg,
socket_id, 0);
return (struct spdk_mempool *)mp;
}
struct spdk_mempool *
spdk_mempool_create(const char *name, size_t count,
size_t ele_size, size_t cache_size, int socket_id)
{
return spdk_mempool_create_ctor(name, count, ele_size, cache_size, socket_id,
NULL, NULL);
}
char *
spdk_mempool_get_name(struct spdk_mempool *mp)
{