2016-06-10 19:09, Wu, Xiaoban: > Dear DPDK Users, > > > I have a very small suggestion to the comment of the rte_eth_tx_burst(). It > is not a big deal to the experienced users, but I think this will make the > new users know how to use this function more clearly and see the big picture > easily. > > > The comment of "tx_pkts" says: > > * @param tx_pkts > * The address of an array of *nb_pkts* pointers to *rte_mbuf* structures > * which contain the output packets. > > > I am a beginner of DPDK. If I see this comment I would probably naively use > rte_zmalloc() to construct such pointer array, for each pointer I use > rte_malloc() to allocate memory, and finally fill the memory starting from > the position (pointed by the macro rte_pktmbuf_mtod()) with real packet > content(header and payload). > > > But I just find that the rte_eth_tx_burst() will call the rte_pktmbuf_free() > to free the struct rte_mbuf. In default, "CONFIG_RTE_LIBRTE_MBUF_DEBUG=n", > this means it will skip the __rte_mbuf_sanity_check(), and will finally get > into rte_mempool_put(). Since above construction process skip the > construction of the field "struct rte_mempool", it means the "struct > rte_mempool" field is null in each packet "struct rte_mbuf"(of course, all > the fields are zero). Hence it will finally cause segmentation fault. > > > Thus, I have a very small suggestion, please add something like "It is > recommended that the tx_pkts is constructed by rte_pktmbuf_pool_create() > combined with rte_mempool_get_bulk(), if not please make sure the fields of > the struct rte_mbuf are correctly configured."
Good suggestion. Olivier do you agree?
