[v1 04/10] bus/dpaa: optimize bman acquire/release

Stephen Hemminger stephen at networkplumber.org
Wed May 28 16:30:41 CEST 2025


On Wed, 28 May 2025 16:09:28 +0530
vanshika.shukla at nxp.com wrote:

> +RTE_EXPORT_INTERNAL_SYMBOL(bman_acquire_fast)
> +int
> +bman_acquire_fast(struct bman_pool *pool, uint64_t *bufs, uint8_t num)
> +{
> +	struct bman_portal *p = get_affine_portal();
> +	struct bm_mc_command *mcc;
> +	struct bm_mc_result *mcr;
> +	uint8_t i, rst;
> +	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_ONLY_RELEASE)
> +		return -EINVAL;
> +#endif
> +
> +	mcc = bm_mc_start(&p->p);
> +	mcc->acquire.bpid = pool->params.bpid;
> +	bm_mc_commit(&p->p, BM_MCC_VERB_CMD_ACQUIRE |
> +			(num & BM_MCC_VERB_ACQUIRE_BUFCOUNT));
> +	while (!(mcr = bm_mc_result(&p->p)))
> +		;
> +	rst = mcr->verb & BM_MCR_VERB_ACQUIRE_BUFCOUNT;
> +	if (unlikely(!rst))
> +		return 0;
> +
> +	rte_memcpy(bm_bufs, mcr->acquire.bufs,
> +		sizeof(struct bm_buffer) * rst);
> +
> +	for (i = 0; i < rst; i++)
> +		bufs[i] = bman_hw_extract_addr(&bm_bufs[i]);
> +

Why do you need multiple the local copy?
Does hw_extract_addr modify the buffers?


More information about the dev mailing list