[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