From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 6424CF610 for ; Wed, 11 Jan 2017 18:00:54 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga105.fm.intel.com with ESMTP; 11 Jan 2017 09:00:54 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="921404051" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.237.220.38]) ([10.237.220.38]) by orsmga003.jf.intel.com with ESMTP; 11 Jan 2017 09:00:52 -0800 To: Stephen Hemminger , Sergey Vyazmitinov References: <1483048216-2936-1-git-send-email-s.vyazmitinov@brain4net.com> <20170111081759.7b1ee146@xeon-e3> Cc: olivier.matz@6wind.com, dev@dpdk.org From: Ferruh Yigit Message-ID: Date: Wed, 11 Jan 2017 17:00:52 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <20170111081759.7b1ee146@xeon-e3> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit 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:00:55 -0000 Hi Sergey, On 1/11/2017 4:17 PM, Stephen Hemminger wrote: > 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 = 0; i < n; ++i) { >> + mbuf = mbufs[i]; >> + __rte_mbuf_sanity_check(mbuf, 1); >> + >> + mbuf = mbuf->next; >> + while (mbuf != NULL) { >> + m_next = mbuf->next; >> + rte_pktmbuf_free_seg(mbuf); >> + mbuf = m_next; >> + } >> + } >> + rte_mempool_put_bulk(mp, (void * const *)mbufs, n); >> +} > > The mbufs may come from different pools. You need to handle that. > As Stephen pointed mbufs can be from different mempools. But still can benefit from bulk allocation part of your patch, would you mind separating patches for alloc and free? Thanks, ferruh