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),
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