[dpdk-dev] [PATCH] kni: use bulk functions to allocate and free mbufs
Ananyev, Konstantin
konstantin.ananyev at intel.com
Wed Jan 11 18:28:21 CET 2017
> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Stephen Hemminger
> Sent: Wednesday, January 11, 2017 4:18 PM
> To: Sergey Vyazmitinov <s.vyazmitinov at brain4net.com>
> Cc: olivier.matz at 6wind.com; Yigit, Ferruh <ferruh.yigit at intel.com>; dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] kni: use bulk functions to allocate and free mbufs
>
> On Fri, 30 Dec 2016 04:50:16 +0700
> Sergey Vyazmitinov <s.vyazmitinov at brain4net.com> wrote:
>
> > /**
> > + * Free n packets mbuf back into its original mempool.
> > + *
> > + * Free each mbuf, and all its segments in case of chained buffers. Each
> > + * segment is added back into its original mempool.
> > + *
> > + * @param mp
> > + * The packets mempool.
> > + * @param mbufs
> > + * The packets mbufs array to be freed.
> > + * @param n
> > + * Number of packets.
> > + */
> > +static inline void rte_pktmbuf_free_bulk(struct rte_mempool *mp,
> > + struct rte_mbuf **mbufs, unsigned n)
> > +{
> > + struct rte_mbuf *mbuf, *m_next;
> > + unsigned i;
> > + for (i = 0; i < n; ++i) {
> > + mbuf = mbufs[i];
> > + __rte_mbuf_sanity_check(mbuf, 1);
> > +
> > + mbuf = mbuf->next;
> > + while (mbuf != NULL) {
> > + m_next = mbuf->next;
> > + rte_pktmbuf_free_seg(mbuf);
> > + mbuf = m_next;
> > + }
> > + }
> > + rte_mempool_put_bulk(mp, (void * const *)mbufs, n);
> > +}
>
> The mbufs may come from different pools. You need to handle that.
I suppose both stituations are possible:
1) user knows off-hand that all mbufs in the group are from the same mempool
2) user can't guarantee that all mbufs in the group are from same mempool.
As I understand that patch is for case 1) only.
For 2) it could be a separate function and separate patch.
Konstantin
More information about the dev
mailing list