Hi Ferruh, On Fri, 9 Jun 2017 12:24:56 +0100, Ferruh Yigit <ferruh.yi...@intel.com> wrote: > On 6/8/2017 12:22 PM, Shijith Thotton wrote: > > Avoid re-initializing of mbuf fields which are set while in pool. > > Replaced lio_recv_buffer_alloc with rte_pktmbuf_alloc. > > > > See commit 8f094a9ac5d7 ("mbuf: set mbuf fields while in pool"). > > > > Signed-off-by: Shijith Thotton <shijith.thot...@caviumnetworks.com> > > <...> > > > @@ -489,9 +466,6 @@ > > droq->refill_count++; > > > > if (likely(nicbuf != NULL)) { > > - nicbuf->data_off = RTE_PKTMBUF_HEADROOM; > > Hi Shijith, Olivier, > > nb_segs and next are initialized properly when mbuf allocated, but is > "data_off = RTE_PKTMBUF_HEADROOM" guaranteed? > > > - nicbuf->nb_segs = 1; > > - nicbuf->next = NULL; > > /* We don't have a way to pass flags yet */ > > nicbuf->ol_flags = 0; > > if (rh->r_dh.has_hash) { > > <...>
It's not guaranteed when using a raw allocation, i.e. rte_mbuf_raw_alloc() or rte_mempool_get(). The PMD usually use these functions in Rx path to fully initialize the mbuf fields on their own. In this driver, it looks it uses rte_pktmbuf_alloc(), which calls rte_pktmbuf_reset(), fully initializing the mbuf struct. So data_off is properly set. As a side note, I wonder if lio_recv_buffer_alloc() replaced by rte_pktmbuf_alloc() everywhere in the code. Olivier