62static ENV_LOCAL
unsigned int _pool_tbl_iter_idx;
66 odp_pool_param_t odp_pool_defaults;
67 uint32_t buf_cache_sz;
68 uint32_t pkt_cache_sz;
69 uint32_t vec_cache_sz;
72 if (unlikely(!pool_cfg)) {
74 EM_ESCOPE_POOL_CFG_INIT,
75 "pool_cfg pointer NULL!");
79 odp_pool_param_init(&odp_pool_defaults);
80 memset(pool_cfg, 0,
sizeof(*pool_cfg));
84 buf_cache_sz = odp_pool_defaults.buf.cache_size;
85 pkt_cache_sz = odp_pool_defaults.pkt.cache_size;
86 vec_cache_sz = MIN(odp_pool_defaults.vector.cache_size,
87 odp_pool_defaults.event_vector.cache_size);
88 cache_sz = MIN(buf_cache_sz, pkt_cache_sz);
89 cache_sz = MIN(cache_sz, vec_cache_sz);
100 em_pool_t pool_created;
101 const char *err_str =
"";
104 int err = invalid_pool_cfg(pool_cfg, &err_str);
108 "Pool create: invalid pool-config(%d): %s",
113 err = check_pool_uarea_persistence(pool_cfg, &err_str);
117 "Pool create: user area persistence unsupported(%d): %s",
122 pool_created = pool_create(name, pool, pool_cfg);
127 "Pool create failed,\n"
141 stat = pool_delete(pool);
143 "Pool delete failed");
152 return pool_find(name);
162 if (unlikely(name == NULL || maxlen == 0)) {
164 "Invalid args: name=0x%" PRIx64
", maxlen=%zu",
169 if (unlikely(mpool_elem == NULL || !pool_allocated(mpool_elem))) {
171 "Invalid Pool:%" PRI_POOL "", pool);
176 len = strnlen(mpool_elem->name,
sizeof(mpool_elem->name) - 1);
177 if (maxlen - 1 < len)
180 memcpy(name, mpool_elem->name, len);
190 const unsigned int pool_cnt = pool_count();
192 _pool_tbl_iter_idx = 0;
203 while (!pool_allocated(mpool_elem)) {
204 _pool_tbl_iter_idx++;
207 mpool_elem = &mpool_elem_tbl[_pool_tbl_iter_idx];
210 return pool_idx2hdl(_pool_tbl_iter_idx);
218 _pool_tbl_iter_idx++;
221 const mpool_elem_t *mpool_elem = &mpool_elem_tbl[_pool_tbl_iter_idx];
224 while (!pool_allocated(mpool_elem)) {
225 _pool_tbl_iter_idx++;
228 mpool_elem = &mpool_elem_tbl[_pool_tbl_iter_idx];
231 return pool_idx2hdl(_pool_tbl_iter_idx);
242 "Inv. args: pool:%" PRI_POOL " pool_info:%p",
248 "EM-pool:%" PRI_POOL " not created", pool);
250 memset(pool_info, 0,
sizeof(*pool_info));
252 strncpy(pool_info->name, pool_elem->name,
sizeof(pool_info->name) - 1);
253 pool_info->name[
sizeof(pool_info->name) - 1] =
'\0';
261 pool_info->subpool[i].
size = pool_elem->
size[i];
286 odp_pool_stats_t odp_stats;
289 odp_stats.thread.first = 0;
290 odp_stats.thread.last = 0;
292 int ret = odp_pool_stats(pool_elem->
odp_pool[i], &odp_stats);
295 "EM-pool:%" PRI_POOL " subpool:%d stats failed:%d",
298 free = odp_stats.available + odp_stats.cache_available;
303 pool_info->subpool[i].
used = used;
304 pool_info->subpool[i].
free = free;
313 pool_info_print_hdr(1);
314 pool_info_print(pool);
323 "Inv. args: pool:%" PRI_POOL, pool);
327 if (
EM_CHECK_LEVEL >= 2 && unlikely(!pool_allocated(pool_elem))) {
329 "EM-pool:%" PRI_POOL " not created", pool);
344 pool_info_print_hdr(num);
346 pool_info_print(pool);
359 "Inv. args: pool:%" PRI_POOL " pool_stats_opt:%p",
360 pool, pool_stats_opt);
365 "EM-pool:%" PRI_POOL " not created", pool);
367 pool_stats_opt_odp2em(pool_stats_opt, &pool_elem->
stats_opt);
374 pool_stats_opt_print_hdr();
375 pool_stats_opt_print(pool);
385 pool_stats_opt_print_hdr();
387 pool_stats_opt_print(pool);
396 odp_pool_stats_t *odp_stats;
402 "Inv. args: pool:%" PRI_POOL " pool_stats:%p",
408 "EM-pool: %" PRI_POOL "not created", pool);
412 odp_stats = (odp_pool_stats_t *)&pool_stats->subpool_stats[i];
415 odp_stats->thread.first = 0;
416 odp_stats->thread.last = 0;
418 ret = odp_pool_stats(pool_elem->
odp_pool[i], odp_stats);
421 "EM-pool:%" PRI_POOL " subpool:%d stats failed:%d",
425 pool_stats->num_subpools = i;
438 "EM-pool:%" PRI_POOL " invalid", pool);
443 "EM-pool:%" PRI_POOL " not created", pool);
446 ret = odp_pool_stats_reset(pool_elem->
odp_pool[i]);
448 "EM-pool:%" PRI_POOL " subpool:%d stats reset failed:%d",
457 pool_stats_print(pool);
460#define SUBPOOL_STATS_INV_ARG_FMT \
461"Inv. args: pool:%" PRI_POOL " subpools:%p num_subpools:%d subpool_stats:%p"
469 odp_pool_stats_t *odp_stats;
473 unlikely(!pool_elem || !subpools || !subpool_stats ||
474 num_subpools <= 0 || num_subpools > pool_elem->
num_subpools)) {
476 SUBPOOL_STATS_INV_ARG_FMT, pool, subpools,
477 num_subpools, subpool_stats);
481 if (
EM_CHECK_LEVEL >= 2 && unlikely(!pool_allocated(pool_elem))) {
483 "EM-pool: %" PRI_POOL "not allocated", pool);
487 for (
int i = 0; i < num_subpools; i++) {
489 unlikely(subpools[i] < 0 || subpools[i] > pool_elem->
num_subpools - 1)) {
491 "arg 'subpools[%d]: %d' out of range", i, subpools[i]);
495 odp_stats = (odp_pool_stats_t *)&subpool_stats[i];
498 odp_stats->thread.first = 0;
499 odp_stats->thread.last = 0;
501 ret = odp_pool_stats(pool_elem->
odp_pool[subpools[i]], odp_stats);
502 if (unlikely(ret < 0)) {
504 "EM-pool:%" PRI_POOL " subpool:%d stats failed:%d",
505 pool, subpools[i], ret);
524 "Inv. args: pool:%" PRI_POOL " subpools:%p num:%d",
525 pool, subpools, num_subpools);
530 "EM-pool:%" PRI_POOL " not created", pool);
532 for (
int i = 0; i < num_subpools; i++) {
535 "arg 'subpools[%d]: %d' out of range", i, subpools[i]);
537 ret = odp_pool_stats_reset(pool_elem->
odp_pool[subpools[i]]);
539 "EM-pool:%" PRI_POOL " subpool:%d stats reset failed:%d",
540 pool, subpools[i], ret);
548 subpools_stats_print(pool, subpools, num_subpools);
551static inline void assign_odp_stats_opt(odp_pool_stats_opt_t *opt_odp,
555 opt_odp->bit.available = opt_em->
available;
556 opt_odp->bit.alloc_ops = opt_em->
alloc_ops;
558 opt_odp->bit.free_ops = opt_em->
free_ops;
559 opt_odp->bit.total_ops = opt_em->
total_ops;
571 odp_pool_stats_opt_t opt_odp;
572 odp_pool_stats_selected_t *odp_stats;
578 "Inv. args: pool:%" PRI_POOL " pool_stats:%p opt: %p",
579 pool, pool_stats, opt);
584 "EM-pool: %" PRI_POOL "not created", pool);
586 assign_odp_stats_opt(&opt_odp, opt);
589 odp_pool_t odp_pool = pool_elem->
odp_pool[i];
594 "EM-pool:%" PRI_POOL " invalid subpool:%d",
597 odp_stats = (odp_pool_stats_selected_t *)&pool_stats->subpool_stats[i];
599 ret = odp_pool_stats_selected(odp_pool, odp_stats, &opt_odp);
602 "EM-pool:%" PRI_POOL " subpool:%d stats selected failed:%d",
606 pool_stats->num_subpools = i;
613 pool_stats_selected_print(pool, opt);
616#define SUBPOOL_STATS_SELECTED_INV_ARG_FMT \
617"Inv. args: pool:%" PRI_POOL " subpools:%p num_subpools:%d subpool_stats:%p opt: %p"
625 odp_pool_stats_opt_t opt_odp;
626 odp_pool_stats_selected_t *odp_stats;
630 unlikely(!pool_elem || !subpools || !subpool_stats || !opt ||
631 num_subpools <= 0 || num_subpools > pool_elem->
num_subpools)) {
633 SUBPOOL_STATS_SELECTED_INV_ARG_FMT, pool, subpools,
634 num_subpools, subpool_stats, opt);
638 if (
EM_CHECK_LEVEL >= 2 && unlikely(!pool_allocated(pool_elem))) {
640 "EM-pool: %" PRI_POOL "not allocated", pool);
644 assign_odp_stats_opt(&opt_odp, opt);
646 for (
int i = 0; i < num_subpools; i++) {
648 unlikely(subpools[i] < 0 || subpools[i] > pool_elem->
num_subpools - 1)) {
650 "arg 'subpools[%d]: %d' out of range", i, subpools[i]);
654 odp_pool_t odp_pool = pool_elem->
odp_pool[subpools[i]];
656 if (
EM_CHECK_LEVEL >= 3 && unlikely(odp_pool == ODP_POOL_INVALID)) {
658 "EM-pool:%" PRI_POOL " invalid subpool:%d", pool, i);
662 odp_stats = (odp_pool_stats_selected_t *)&subpool_stats[i];
664 ret = odp_pool_stats_selected(odp_pool, odp_stats, &opt_odp);
665 if (unlikely(ret < 0)) {
667 "EM-pool:%" PRI_POOL " subpool:%d stats failed:%d",
668 pool, subpools[i], ret);
681 subpools_stats_selected_print(pool, subpools, num_subpools, opt);
686 return (uint64_t)pool;
#define INTERNAL_ERROR(error, escope, fmt,...)
#define RETURN_ERROR_IF(cond, error, escope, fmt,...)
#define EM_CHECK_INIT_CALLED
#define EM_MAX_SUBPOOLS
The maximum number of subpools in each EM pool. The subpool is a pool with buffers of only one size.
void em_pool_stats_opt_print(em_pool_t pool)
em_pool_t em_pool_find(const char *name)
em_pool_t em_pool_create(const char *name, em_pool_t pool, const em_pool_cfg_t *pool_cfg)
void em_pool_cfg_init(em_pool_cfg_t *const pool_cfg)
void em_pool_subpool_stats_selected_print(em_pool_t pool, const int subpools[], int num_subpools, const em_pool_stats_opt_t *opt)
Helper function to print selected statistics for subpool(s) of an EM pool.
em_pool_t em_pool_next(void)
uint64_t em_pool_to_u64(em_pool_t pool)
em_status_t em_pool_subpool_stats_reset(em_pool_t pool, const int subpools[], int num_subpools)
void em_pool_stats_opt_print_all(void)
int em_pool_subpool_stats_selected(em_pool_t pool, const int subpools[], int num_subpools, em_pool_subpool_stats_selected_t subpool_stats[], const em_pool_stats_opt_t *opt)
Retrieve selected statistics about subpool(s) of an EM pool.
size_t em_pool_name(em_pool_t pool, char *name, size_t maxlen)
void em_pool_subpool_stats_print(em_pool_t pool, const int subpools[], int num_subpools)
Helper function to print statistics for subpool(s) of an EM pool.
void em_pool_stats_selected_print(em_pool_t pool, const em_pool_stats_opt_t *opt)
Helper function to print selected statistics for an EM pool.
em_status_t em_pool_stats_reset(em_pool_t pool)
void em_pool_stats_print(em_pool_t pool)
Helper function to print statistics for an EM pool.
em_status_t em_pool_stats_selected(em_pool_t pool, em_pool_stats_selected_t *pool_stats, const em_pool_stats_opt_t *opt)
Retrieve selected statistics about an EM pool.
em_status_t em_pool_info(em_pool_t pool, em_pool_info_t *pool_info)
void em_pool_info_print(em_pool_t pool)
em_status_t em_pool_delete(em_pool_t pool)
em_status_t em_pool_stats_opt(em_pool_t pool, em_pool_stats_opt_t *pool_stats_opt)
int em_pool_subpool_stats(em_pool_t pool, const int subpools[], int num_subpools, em_pool_subpool_stats_t subpool_stats[])
Retrieve statistics about subpool(s) of an EM pool.
em_pool_t em_pool_first(unsigned int *num)
em_status_t em_pool_stats(em_pool_t pool, em_pool_stats_t *pool_stats)
Retrieve statistics about an EM pool.
int em_pool_num_subpools(em_pool_t pool)
Return the number of subpools in an EM pool.
void em_pool_info_print_all(void)
struct em_pool_cfg_t::@23 subpool[EM_MAX_SUBPOOLS]
uint32_t __internal_check
em_event_type_t event_type
em_event_type_t event_type
em_pool_stats_opt_t stats_opt
struct mpool_elem_t::@54 user_area
odp_pool_stats_opt_t stats_opt
odp_pool_t odp_pool[EM_MAX_SUBPOOLS]
em_event_type_t event_type