[dpdk-dev,02/13] mbuf: rte_pktmbuf_free_bulk()

Message ID 0af54798c5e025c95e1315ef9b33f4c930177f24.1481590851.git.mirq-linux@rere.qmqm.pl (mailing list archive)
State Rejected, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel Per-patch compilation check success Compilation OK

Commit Message

Michał Mirosław Dec. 13, 2016, 1:08 a.m. UTC
  Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>

---
 lib/librte_mbuf/rte_mbuf.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
  

Comments

Stephen Hemminger Dec. 13, 2016, 9:41 p.m. UTC | #1
On Tue, 13 Dec 2016 02:08:15 +0100 (CET)
Michał Mirosław <mirq-linux@rere.qmqm.pl> wrote:

> Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>
> 
> ---
>  lib/librte_mbuf/rte_mbuf.h | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> index ead7c6e..a95d99f 100644
> --- a/lib/librte_mbuf/rte_mbuf.h
> +++ b/lib/librte_mbuf/rte_mbuf.h
> @@ -1248,6 +1248,21 @@ static inline void rte_pktmbuf_free(struct rte_mbuf *m)
>  }
>  
>  /**
> + * Free multiple packet mbufs back into their original mempool(s).
> + *
> + * @param mp
> + *   Pointer to array of packet mbufs to be freed.
> + * @param n
> + *   Count of packet mbufs to free.
> + */
> +static inline void rte_pktmbuf_free_bulk(struct rte_mbuf **mp, uint32_t n)
> +{
> +	uint32_t i;
> +	for (i = 0; i < n; ++i)
> +		rte_pktmbuf_free(mp[i]);
> +}

Why not do something smarter that uses mempool_put_bulk?
  
Michał Mirosław Dec. 14, 2016, 2:09 a.m. UTC | #2
On Tue, Dec 13, 2016 at 01:41:11PM -0800, Stephen Hemminger wrote:
> On Tue, 13 Dec 2016 02:08:15 +0100 (CET)
> Michał Mirosław <mirq-linux@rere.qmqm.pl> wrote:
> 
> > Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>
> > 
> > ---
> >  lib/librte_mbuf/rte_mbuf.h | 15 +++++++++++++++
> >  1 file changed, 15 insertions(+)
> > 
> > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> > index ead7c6e..a95d99f 100644
> > --- a/lib/librte_mbuf/rte_mbuf.h
> > +++ b/lib/librte_mbuf/rte_mbuf.h
> > @@ -1248,6 +1248,21 @@ static inline void rte_pktmbuf_free(struct rte_mbuf *m)
> >  }
> >  
> >  /**
> > + * Free multiple packet mbufs back into their original mempool(s).
> > + *
> > + * @param mp
> > + *   Pointer to array of packet mbufs to be freed.
> > + * @param n
> > + *   Count of packet mbufs to free.
> > + */
> > +static inline void rte_pktmbuf_free_bulk(struct rte_mbuf **mp, uint32_t n)
> > +{
> > +	uint32_t i;
> > +	for (i = 0; i < n; ++i)
> > +		rte_pktmbuf_free(mp[i]);
> > +}
> 
> Why not do something smarter that uses mempool_put_bulk?

I haven't noticed there even is something like it implemented. I'll have
a look. It can be implemented in another patch, though.

Best Regards,
Michał Mirosław
  

Patch

diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index ead7c6e..a95d99f 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -1248,6 +1248,21 @@  static inline void rte_pktmbuf_free(struct rte_mbuf *m)
 }
 
 /**
+ * Free multiple packet mbufs back into their original mempool(s).
+ *
+ * @param mp
+ *   Pointer to array of packet mbufs to be freed.
+ * @param n
+ *   Count of packet mbufs to free.
+ */
+static inline void rte_pktmbuf_free_bulk(struct rte_mbuf **mp, uint32_t n)
+{
+	uint32_t i;
+	for (i = 0; i < n; ++i)
+		rte_pktmbuf_free(mp[i]);
+}
+
+/**
  * Creates a "clone" of the given packet mbuf.
  *
  * Walks through all segments of the given packet mbuf, and for each of them: