X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fmempool%2Focteontx%2Focteontx_fpavf.c;h=831c48d2caf50d4b567bddfce936d06ab81eea75;hb=89ee1e94bc2d97ccb1ee00c834d81b1a895d0241;hp=3290aa0a5f3313aa2c03b168bbb1b516c2482f58;hpb=806714f1e7f95efae9dede5f10c9349ce1ecd5c9;p=dpdk.git diff --git a/drivers/mempool/octeontx/octeontx_fpavf.c b/drivers/mempool/octeontx/octeontx_fpavf.c index 3290aa0a5f..831c48d2ca 100644 --- a/drivers/mempool/octeontx/octeontx_fpavf.c +++ b/drivers/mempool/octeontx/octeontx_fpavf.c @@ -48,7 +48,7 @@ #include #include -#include +#include "octeontx_mbox.h" #include "octeontx_fpavf.h" /* FPA Mbox Message */ @@ -176,9 +176,6 @@ octeontx_fpa_gpool2handle(uint16_t gpool) RTE_ASSERT(gpool < FPA_VF_MAX); res = &fpadev.pool[gpool]; - if (unlikely(res == NULL)) - return 0; - return (uintptr_t)res->bar0 | gpool; } @@ -483,6 +480,33 @@ 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; + uint8_t gpool; + uintptr_t pool_bar; + + if (unlikely(!octeontx_fpa_handle_valid(handle))) + return -EINVAL; + + /* get the gpool */ + gpool = octeontx_fpa_bufpool_gpool(handle); + + /* Get pool bar address from handle */ + pool_bar = handle & ~(uint64_t)FPA_GPOOL_MASK; + + cnt = fpavf_read64((void *)((uintptr_t)pool_bar + + FPA_VF_VHAURA_CNT(gpool))); + limit = fpavf_read64((void *)((uintptr_t)pool_bar + + FPA_VF_VHAURA_CNT_LIMIT(gpool))); + + avail = fpavf_read64((void *)((uintptr_t)pool_bar + + 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, @@ -496,8 +520,7 @@ octeontx_fpa_bufpool_create(unsigned int object_size, unsigned int object_count, int res; RTE_SET_USED(node_id); - FPAVF_STATIC_ASSERTION(sizeof(struct rte_mbuf) <= - OCTEONTX_FPAVF_BUF_OFFSET); + RTE_BUILD_BUG_ON(sizeof(struct rte_mbuf) > OCTEONTX_FPAVF_BUF_OFFSET); if (unlikely(*va_start == NULL)) goto error_end; @@ -612,7 +635,7 @@ octeontx_fpa_bufpool_destroy(uintptr_t handle, int node_id) cnt = fpavf_read64((void *)((uintptr_t)pool_bar + FPA_VF_VHAURA_CNT(gpool))); if (cnt) { - fpavf_log_dbg("buffer exist in pool cnt %ld\n", cnt); + fpavf_log_dbg("buffer exist in pool cnt %" PRId64 "\n", cnt); return -EBUSY; } @@ -756,7 +779,7 @@ fpavf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) { uint8_t *idreg; int res; - struct fpavf_res *fpa; + struct fpavf_res *fpa = NULL; RTE_SET_USED(pci_drv); RTE_SET_USED(fpa);