/* SPDX-License-Identifier: BSD-3-Clause
*
- * Copyright 2017 NXP
+ * Copyright 2017,2019 NXP
*
*/
struct dpaa_memseg_list rte_dpaa_memsegs
= TAILQ_HEAD_INITIALIZER(rte_dpaa_memsegs);
-struct dpaa_bp_info rte_dpaa_bpid_info[DPAA_MAX_BPOOLS];
+struct dpaa_bp_info *rte_dpaa_bpid_info;
static int
dpaa_mbuf_create_pool(struct rte_mempool *mp)
MEMPOOL_INIT_FUNC_TRACE();
+ if (unlikely(!RTE_PER_LCORE(dpaa_io))) {
+ ret = rte_dpaa_portal_init((void *)0);
+ if (ret) {
+ DPAA_MEMPOOL_ERR(
+ "rte_dpaa_portal_init failed with ret: %d",
+ ret);
+ return -1;
+ }
+ }
bp = bman_new_pool(¶ms);
if (!bp) {
DPAA_MEMPOOL_ERR("bman_new_pool() failed");
DPAA_MEMPOOL_WARN("drained %u bufs from BPID %d",
num_bufs, bpid);
+ if (rte_dpaa_bpid_info == NULL) {
+ rte_dpaa_bpid_info = (struct dpaa_bp_info *)rte_zmalloc(NULL,
+ sizeof(struct dpaa_bp_info) * DPAA_MAX_BPOOLS,
+ RTE_CACHE_LINE_SIZE);
+ if (rte_dpaa_bpid_info == NULL) {
+ bman_free_pool(bp);
+ return -ENOMEM;
+ }
+ }
+
rte_dpaa_bpid_info[bpid].mp = mp;
rte_dpaa_bpid_info[bpid].bpid = bpid;
rte_dpaa_bpid_info[bpid].size = mp->elt_size;
struct dpaa_bp_info *bp_info;
unsigned int total_elt_sz;
- MEMPOOL_INIT_FUNC_TRACE();
-
if (!mp || !mp->pool_data) {
DPAA_MEMPOOL_ERR("Invalid mempool provided\n");
return 0;
bp_info = DPAA_MEMPOOL_TO_POOL_INFO(mp);
total_elt_sz = mp->header_size + mp->elt_size + mp->trailer_size;
- DPAA_MEMPOOL_DEBUG("Req size %" PRIx64 " vs Available %u\n",
+ DPAA_MEMPOOL_DPDEBUG("Req size %" PRIx64 " vs Available %u\n",
(uint64_t)len, total_elt_sz * mp->size);
/* Detect pool area has sufficient space for elements in this memzone */
*/
TAILQ_INSERT_HEAD(&rte_dpaa_memsegs, ms, next);
- return rte_mempool_op_populate_default(mp, max_objs, vaddr, paddr, len,
+ return rte_mempool_op_populate_helper(mp, max_objs, vaddr, paddr, len,
obj_cb, obj_cb_arg);
}