From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Mario Gianni" Subject: Re: problem with rte_pktmbuf_prepend (possible bug?) Date: Wed, 19 Feb 2014 09:04:33 -0500 Message-ID: <20140219140433.259460@gmx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Cc: dev-VfR2kkLFssw@public.gmane.org To: "Benson, Bryan" ,"Periklis Akritidis" Return-path: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" This is my init function: pktmbuf_pool[socketid] =3D rte_mempool_create( name, APP_DEFAULT_MEMPOOL_BUFFERS, APP_DEFAULT_MBUF_SIZE, APP_DEFAULT_MEMPOOL_CACHE_SIZE, sizeof(struct rte_pktmbuf_pool_private), rte_pktmbuf_pool_init, NULL, rte_pktmbuf_init, NULL, socketid, 0); I copied it from a sample code. Anyway it seems to me that mbuf_free does not reset the *data pointer, ac= tually I have partially resolved by prepending manually the data without = moving the * data pointer at all albeit it's not a very clean solution. Could this be a bug in the DPDK mbuf_free() function? ----- Original Message ----- From: Benson, Bryan Sent: 02/18/14 06:16 PM To: Periklis Akritidis, Mario Gianni Subject: RE: [dpdk-dev] problem with rte_pktmbuf_prepend (possible bug?) Whoa, be careful, we used a custom init function and had a nasty bug beca= use we assumed it was called on mbuf_free as well. The rte_pktmbuf_init f= unction pointer passed into mempool create is only used at pool initializ= ation time, not when an mbuf is freed - A reference to the obj_initi func= tion is not stored anywhere for future use during mbuf_free. Some of the = fields are reset when the NIC has completed the send of the mbufs, but it= does not use a custom function ptr. Thanks, Bryan Benson _______________= _________________________ From: dev [dev-bounces-VfR2kkLFssw@public.gmane.org] on behalf of P= eriklis Akritidis [akritid-wlH+TjtWvpzuufBYgWm87A@public.gmane.org] Sent: Tuesday, February 18, 20= 14 6:19 AM To: Mario Gianni Cc: dev-VfR2kkLFssw@public.gmane.org Subject: Re: [dpdk-dev] prob= lem with rte_pktmbuf_prepend (possible bug?) Hi Mario, Are you passing rt= e_pktmbuf_init as the obj_init argument to rte_mempool_create? It is call= ed when the mbuf if freed and it will reset the fields. I vaguely remembe= r I had the same issue at some point and resolved it somehow. This comes = to mind. Cheers, Periklis On 18 Feb, 2014, at 6:27 pm, Mario Gianni wrote: > Hi all, I'm experimenting some code with DPDK= v1.5.0 and I have the following problem: > > I have a thread that receiv= es packets from NIC, once I received a packet I want to prepend some data= to it and I try to do so through the function rte_pktmbuf_prepend() > th= en the packet is enqueued in a ring buffer where it will be used by a cli= ent thread before being dropped through the function rte_pktmbuf_free() c= alled by the client thread. > > Now, if I try to send packets to this pro= gram I have the following behaviour: > In a first time it seems to work c= orrectly, then after a certain number of received packets (approximately = the same number as the number of mbufs present in the mempool) if I call = the rte_pktmbuf_headroom it returns that the headroom is shrinking more t= han the expected, until after a certain number of packets the headroom go= es to zero. > > It seems like that when I call the rte_pktmbuf_free() fun= ction it doesn't reset the data position inside the mbuf, so when I call = for a second time the mbuf the headroom continues to shrink until it fini= shes. > > > Do you have any idea of this strange behaviour?Could it be a = bug in the prepend/free function? > > > Thank you, > > Mario