Signed-off-by: Santosh Shukla <santosh.shu...@caviumnetworks.com> Signed-off-by: Jerin Jacob <jerin.ja...@caviumnetworks.com> --- drivers/mempool/octeontx/octeontx_fpavf.c | 22 ++++++++++++++++++++++ drivers/mempool/octeontx/octeontx_fpavf.h | 2 ++ drivers/mempool/octeontx/rte_mempool_octeontx.c | 12 +++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/drivers/mempool/octeontx/octeontx_fpavf.c b/drivers/mempool/octeontx/octeontx_fpavf.c index bcbbefd7d..adee744db 100644 --- a/drivers/mempool/octeontx/octeontx_fpavf.c +++ b/drivers/mempool/octeontx/octeontx_fpavf.c @@ -488,6 +488,28 @@ octeontx_fpa_bufpool_block_size(uintptr_t handle) return FPA_CACHE_LINE_2_OBJSZ(res->sz128); } +int +octeontx_fpa_bufpool_free_count(uintptr_t handle) +{ + uint64_t cnt, limit, avail; + int gpool; + + if (unlikely(!octeontx_fpa_handle_valid(handle))) + return -EINVAL; + + gpool = octeontx_fpa_handle2gpool(handle); + + cnt = fpavf_read64((void *)((uintptr_t)handle + + FPA_VF_VHAURA_CNT(gpool))); + limit = fpavf_read64((void *)((uintptr_t)handle + + FPA_VF_VHAURA_CNT_LIMIT(gpool))); + + avail = fpavf_read64((void *)((uintptr_t)handle + + FPA_VF_VHPOOL_AVAILABLE(gpool))); + + return RTE_MIN(avail, (limit - cnt)); +} + uintptr_t octeontx_fpa_bufpool_create(unsigned int object_size, unsigned int object_count, unsigned int buf_offset, char **va_start, diff --git a/drivers/mempool/octeontx/octeontx_fpavf.h b/drivers/mempool/octeontx/octeontx_fpavf.h index 936276715..9c601e0f8 100644 --- a/drivers/mempool/octeontx/octeontx_fpavf.h +++ b/drivers/mempool/octeontx/octeontx_fpavf.h @@ -138,4 +138,6 @@ int octeontx_fpa_bufpool_destroy(uintptr_t handle, int node); int octeontx_fpa_bufpool_block_size(uintptr_t handle); +int +octeontx_fpa_bufpool_free_count(uintptr_t handle); #endif /* __OCTEONTX_FPAVF_H__ */ diff --git a/drivers/mempool/octeontx/rte_mempool_octeontx.c b/drivers/mempool/octeontx/rte_mempool_octeontx.c index 47d16cb8f..e56ea43c7 100644 --- a/drivers/mempool/octeontx/rte_mempool_octeontx.c +++ b/drivers/mempool/octeontx/rte_mempool_octeontx.c @@ -145,13 +145,23 @@ octeontx_fpavf_dequeue(struct rte_mempool *mp, void **obj_table, return 0; } +static unsigned int +octeontx_fpavf_get_count(const struct rte_mempool *mp) +{ + uintptr_t pool; + + pool = (uintptr_t)mp->pool_id; + + return octeontx_fpa_bufpool_free_count(pool); +} + static struct rte_mempool_ops octeontx_fpavf_ops = { .name = "octeontx_fpavf", .alloc = octeontx_fpavf_alloc, .free = octeontx_fpavf_free, .enqueue = octeontx_fpavf_enqueue, .dequeue = octeontx_fpavf_dequeue, - .get_count = NULL, + .get_count = octeontx_fpavf_get_count, .get_capabilities = NULL, .update_range = NULL, }; -- 2.11.0