[v4 04/10] bus/dpaa: optimize bman acquire/release
Stephen Hemminger
stephen at networkplumber.org
Sun Jun 29 18:35:47 CEST 2025
On Wed, 11 Jun 2025 12:40:33 +0530
vanshika.shukla at nxp.com wrote:
> -#define BMAN_BUF_MASK 0x0000fffffffffffful
> +RTE_EXPORT_INTERNAL_SYMBOL(bman_release_fast)
> +int
> +bman_release_fast(struct bman_pool *pool, const uint64_t *bufs,
> + uint8_t num)
> +{
> + struct bman_portal *p;
> + struct bm_rcr_entry *r;
> + uint8_t i, avail;
> + uint64_t bpid = pool->params.bpid;
> + struct bm_hw_buf_desc bm_bufs[FSL_BM_BURST_MAX];
> +
> +#ifdef RTE_LIBRTE_DPAA_HWDEBUG
> + if (!num || (num > FSL_BM_BURST_MAX))
> + return -EINVAL;
> + if (pool->params.flags & BMAN_POOL_FLAG_NO_RELEASE)
> + return -EINVAL;
> +#endif
> +
> + p = get_affine_portal();
> + avail = bm_rcr_get_avail(&p->p);
> + if (avail < 2)
> + update_rcr_ci(p, avail);
> + r = bm_rcr_start(&p->p);
> + if (unlikely(!r))
> + return -EBUSY;
> +
> + /*
> + * we can copy all but the first entry, as this can trigger badness
> + * with the valid-bit
> + */
> + bm_bufs[0].bpid = bpid;
> + bm_bufs[0].hi_addr = cpu_to_be16(HI16_OF_U48(bufs[0]));
> + bm_bufs[0].lo_addr = cpu_to_be32(LO32_OF_U48(bufs[0]));
> + for (i = 1; i < num; i++) {
> + bm_bufs[i].hi_addr = cpu_to_be16(HI16_OF_U48(bufs[i]));
> + bm_bufs[i].lo_addr = cpu_to_be32(LO32_OF_U48(bufs[i]));
> + }
> +
> + rte_memcpy(r->bufs, bm_bufs, sizeof(struct bm_buffer) * num);
Use memcpy instead. There are more compiler and security checks around
memcpy().
> +
> + bm_rcr_pvb_commit(&p->p, BM_RCR_VERB_CMD_BPID_SINGLE |
> + (num & BM_RCR_VERB_BUFCOUNT_MASK));
> +
> + return 0;
> +}
More information about the dev
mailing list