On Wed, 11 Jun 2025 12:40:33 +0530 vanshika.shu...@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; > +}