From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 040D2689B for ; Wed, 11 Jan 2017 18:43:20 +0100 (CET) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP; 11 Jan 2017 09:43:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="1092819893" Received: from irsmsx105.ger.corp.intel.com ([163.33.3.28]) by fmsmga001.fm.intel.com with ESMTP; 11 Jan 2017 09:43:18 -0800 Received: from irsmsx111.ger.corp.intel.com (10.108.20.4) by irsmsx105.ger.corp.intel.com (163.33.3.28) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 11 Jan 2017 17:43:17 +0000 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.38]) by irsmsx111.ger.corp.intel.com ([169.254.2.109]) with mapi id 14.03.0248.002; Wed, 11 Jan 2017 17:43:17 +0000 From: "Ananyev, Konstantin" To: Stephen Hemminger CC: Sergey Vyazmitinov , "olivier.matz@6wind.com" , "Yigit, Ferruh" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH] kni: use bulk functions to allocate and free mbufs Thread-Index: AQHSbCZ0kPj1UHLXZU+5SG545LdluKEzhxEAgAAC+YCAAAD4EA== Date: Wed, 11 Jan 2017 17:43:17 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772583F103FCA@irsmsx105.ger.corp.intel.com> References: <1483048216-2936-1-git-send-email-s.vyazmitinov@brain4net.com> <20170111081759.7b1ee146@xeon-e3> <2601191342CEEE43887BDE71AB9772583F103F8F@irsmsx105.ger.corp.intel.com> <20170111093559.753a0fc9@xeon-e3> In-Reply-To: <20170111093559.753a0fc9@xeon-e3> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] kni: use bulk functions to allocate and free mbufs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Jan 2017 17:43:21 -0000 > -----Original Message----- > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > Sent: Wednesday, January 11, 2017 5:36 PM > To: Ananyev, Konstantin > Cc: Sergey Vyazmitinov ; olivier.matz@6wind.= com; Yigit, Ferruh ; dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] kni: use bulk functions to allocate and f= ree mbufs >=20 > On Wed, 11 Jan 2017 17:28:21 +0000 > "Ananyev, Konstantin" wrote: >=20 > > > -----Original Message----- > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Stephen Hemminge= r > > > Sent: Wednesday, January 11, 2017 4:18 PM > > > To: Sergey Vyazmitinov > > > Cc: olivier.matz@6wind.com; Yigit, Ferruh ; d= ev@dpdk.org > > > Subject: Re: [dpdk-dev] [PATCH] kni: use bulk functions to allocate a= nd free mbufs > > > > > > On Fri, 30 Dec 2016 04:50:16 +0700 > > > Sergey Vyazmitinov wrote: > > > > > > > /** > > > > + * Free n packets mbuf back into its original mempool. > > > > + * > > > > + * Free each mbuf, and all its segments in case of chained buffers= . Each > > > > + * segment is added back into its original mempool. > > > > + * > > > > + * @param mp > > > > + * The packets mempool. > > > > + * @param mbufs > > > > + * The packets mbufs array to be freed. > > > > + * @param n > > > > + * Number of packets. > > > > + */ > > > > +static inline void rte_pktmbuf_free_bulk(struct rte_mempool *mp, > > > > + struct rte_mbuf **mbufs, unsigned n) > > > > +{ > > > > + struct rte_mbuf *mbuf, *m_next; > > > > + unsigned i; > > > > + for (i =3D 0; i < n; ++i) { > > > > + mbuf =3D mbufs[i]; > > > > + __rte_mbuf_sanity_check(mbuf, 1); > > > > + > > > > + mbuf =3D mbuf->next; > > > > + while (mbuf !=3D NULL) { > > > > + m_next =3D mbuf->next; > > > > + rte_pktmbuf_free_seg(mbuf); > > > > + mbuf =3D m_next; > > > > + } > > > > + } > > > > + rte_mempool_put_bulk(mp, (void * const *)mbufs, n); > > > > +} > > > > > > The mbufs may come from different pools. You need to handle that. > > > > I suppose both stituations are possible: > > 1) user knows off-hand that all mbufs in the group are from the same me= mpool > > 2) user can't guarantee that all mbufs in the group are from same mempo= ol. > > > > As I understand that patch is for case 1) only. > > For 2) it could be a separate function and separate patch. > > > > Konstantin > > > > >=20 > Please don't make unnecessary assumptions in pursuit of minor optimizatio= ns. I don't suggest to make *any* assumptions. What I am saying we can have 2 functions for two different cases. Obviously we'll have to document it properly. Konstantin > It is trivial to write a correct free bulk that handles pool changing. > Also the free_seg could be bulked as well.