src/dpdk/lib/librte_mbuf/rte_mbuf.h
static inline int rte_pktmbuf_alloc_bulk(struct rte_mempool *pool,
	 struct rte_mbuf **mbufs, unsigned count)
{
	unsigned idx = 0;
	int rc;

	rc = rte_mempool_get_bulk(pool, (void **)mbufs, count);
	if (unlikely(rc))
		return rc;

	/* To understand duff's device on loop unwinding optimization, see
	 * https://en.wikipedia.org/wiki/Duff's_device.
	 * Here while() loop is used rather than do() while{} to avoid extra
	 * check if count is zero.
	 */
	switch (count % 4) {
	case 0:
		while (idx != count) {
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
			/* fall-through */
	case 3:
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
			/* fall-through */
	case 2:
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
			/* fall-through */
	case 1:
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
			/* fall-through */
		}
	}
	return 0;
}
/**
 * Allocate a bulk of mbufs, initialize refcnt and reset the fields to default
 * values.
 *
 *  @param pool
 *    The mempool from which mbufs are allocated.
 *  @param mbufs
 *    Array of pointers to mbufs
 *  @param count
 *    Array size
 *  @return
 *   - 0: Success
 *   - -ENOENT: Not enough entries in the mempool; no mbufs are retrieved.
 */
Allocate a bulk of mbufs, initialize refcnt and reset the fields to default
values.

@param pool
The mempool from which mbufs are allocated.
@param mbufs
Array of pointers to mbufs
@param count
Array size
@return
- 0: Success
- -ENOENT: Not enough entries in the mempool; no mbufs are retrieved.
Allocate a bulk of mbufs initialize refcnt and reset the fields to default values . @param pool The mempool from which mbufs are allocated . @param mbufs Array of pointers to mbufs @param count Array size @return - 0 : Success - - ENOENT : Not enough entries in the mempool ; no mbufs are retrieved .
static inline int rte_pktmbuf_alloc_bulk(struct rte_mempool *pool,
	 struct rte_mbuf **mbufs, unsigned count)
{
	unsigned idx = 0;
	int rc;
	rc = rte_mempool_get_bulk(pool, (void **)mbufs, count);
	if (unlikely(rc))
		return rc;
	switch (count % 4) {
	case 0:
		while (idx != count) {
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
	case 3:
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
	case 2:
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
	case 1:
			__rte_mbuf_raw_sanity_check(mbufs[idx]);
			rte_pktmbuf_reset(mbufs[idx]);
			idx++;
		}
	}
	return 0;
}
static inline int rte_pktmbuf_alloc_bulk ( struct rte_mempool * pool , struct rte_mbuf * * mbufs , unsigned count ) { unsigned idx = 0 ; int rc ; rc = rte_mempool_get_bulk ( pool , ( void * * ) mbufs , count ) ; if ( unlikely ( rc ) ) return rc ; switch ( count % 4 ) { case 0 : while ( idx != count ) { __rte_mbuf_raw_sanity_check ( mbufs [ idx ] ) ; rte_pktmbuf_reset ( mbufs [ idx ] ) ; idx ++ ; case 3 : __rte_mbuf_raw_sanity_check ( mbufs [ idx ] ) ; rte_pktmbuf_reset ( mbufs [ idx ] ) ; idx ++ ; case 2 : __rte_mbuf_raw_sanity_check ( mbufs [ idx ] ) ; rte_pktmbuf_reset ( mbufs [ idx ] ) ; idx ++ ; case 1 : __rte_mbuf_raw_sanity_check ( mbufs [ idx ] ) ; rte_pktmbuf_reset ( mbufs [ idx ] ) ; idx ++ ; } } return 0 ; }
Allocate a bulk of mbufs, initialize refcnt and reset the fields to default
 values.
Allocate a bulk of mbufs initialize refcnt and reset the fields to default values .
/* To understand duff's device on loop unwinding optimization, see
	 * https://en.wikipedia.org/wiki/Duff's_device.
	 * Here while() loop is used rather than do() while{} to avoid extra
	 * check if count is zero.
	 */ /* fall-through */ /* fall-through */ /* fall-through */ /* fall-through */