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;
> +}

Reply via email to