> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Stephen Hemminger
> Sent: Wednesday, December 23, 2015 6:38 PM
> To: Xie, Huawei
> Cc: dev at dpdk.org; dprovan at bivio.net
> Subject: Re: [dpdk-dev] [PATCH v3 1/2] mbuf: provide rte_pktmbuf_alloc_bulk 
> API
> 
> On Wed, 23 Dec 2015 00:17:53 +0800
> Huawei Xie <huawei.xie at intel.com> wrote:
> 
> > +
> > +   rc = rte_mempool_get_bulk(pool, (void **)mbufs, count);
> > +   if (unlikely(rc))
> > +           return rc;
> > +
> > +   switch (count % 4) {
> > +   case 0: while (idx != count) {
> > +                   RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
> > +                   rte_mbuf_refcnt_set(mbufs[idx], 1);
> > +                   rte_pktmbuf_reset(mbufs[idx]);
> > +                   idx++;
> > +   case 3:
> > +                   RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
> > +                   rte_mbuf_refcnt_set(mbufs[idx], 1);
> > +                   rte_pktmbuf_reset(mbufs[idx]);
> > +                   idx++;
> > +   case 2:
> > +                   RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
> > +                   rte_mbuf_refcnt_set(mbufs[idx], 1);
> > +                   rte_pktmbuf_reset(mbufs[idx]);
> > +                   idx++;
> > +   case 1:
> > +                   RTE_MBUF_ASSERT(rte_mbuf_refcnt_read(mbufs[idx]) == 0);
> > +                   rte_mbuf_refcnt_set(mbufs[idx], 1);
> > +                   rte_pktmbuf_reset(mbufs[idx]);
> > +                   idx++;
> > +   }
> > +   }
> > +   return 0;
> > +}
> 
> Since function will not work if count can not be 0 (otherwise 
> rte_mempool_get_bulk will fail),

As I understand, rte_mempool_get_bulk() will work correctly and return 0, if 
count==0.
That's why Huawei prefers while() {}, instead of do {} while() - to avoid extra 
check for
(count != 0) at the start. 
Konstantin


> why not:
>       1. Document that assumption
>       2. Use that assumption to speed up code.
> 
> 
> 
>       switch(count % 4) {
>               do {
>                       case 0:
>                       ...
>                       case 1:
>                       ...
>               } while (idx != count);
>       }
> 
> Also you really need to add a big block comment about this loop, to explain
> what it does and why.

Reply via email to