From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adrien Mazarguil Subject: Re: [PATCH v2 15/17] net/i40e: add flow flush function Date: Tue, 27 Dec 2016 13:40:15 +0100 Message-ID: <20161227124015.GB3737@6wind.com> References: <1480679625-4157-1-git-send-email-beilei.xing@intel.com> <1482819984-14120-1-git-send-email-beilei.xing@intel.com> <1482819984-14120-16-git-send-email-beilei.xing@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: jingjing.wu@intel.com, helin.zhang@intel.com, dev@dpdk.org To: Beilei Xing Return-path: Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by dpdk.org (Postfix) with ESMTP id ADE7A532E for ; Tue, 27 Dec 2016 13:40:23 +0100 (CET) Received: by mail-wm0-f54.google.com with SMTP id k184so88385643wme.1 for ; Tue, 27 Dec 2016 04:40:23 -0800 (PST) Content-Disposition: inline In-Reply-To: <1482819984-14120-16-git-send-email-beilei.xing@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Beilei, On Tue, Dec 27, 2016 at 02:26:22PM +0800, Beilei Xing wrote: > This patch adds i40e_flow_flush function to flush all > filters for users. And flow director flush function > is involved first. > > Signed-off-by: Beilei Xing > --- > drivers/net/i40e/i40e_ethdev.h | 3 +++ > drivers/net/i40e/i40e_fdir.c | 8 ++------ > drivers/net/i40e/i40e_flow.c | 46 ++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 51 insertions(+), 6 deletions(-) [...] > diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c [...] > +static int > +i40e_fdir_filter_flush(struct i40e_pf *pf) > +{ > + struct rte_eth_dev *dev = pf->adapter->eth_dev; > + struct i40e_fdir_info *fdir_info = &pf->fdir; > + struct i40e_fdir_filter *fdir_filter; > + struct i40e_flow *flow; > + int ret = 0; > + > + ret = i40e_fdir_flush(dev); > + if (!ret) { > + /* Delete FDIR filters in FDIR list. */ > + while ((fdir_filter = TAILQ_FIRST(&fdir_info->fdir_list))) > + i40e_sw_fdir_filter_del(pf, fdir_filter); > + > + /* Delete FDIR flows in flow list. */ > + TAILQ_FOREACH(flow, &pf->flow_list, node) { > + if (flow->filter_type == RTE_ETH_FILTER_FDIR) { > + TAILQ_REMOVE(&pf->flow_list, flow, node); > + rte_free(flow); > + } > + } Be careful, I'm not sure calling TAILQ_REMOVE() followed by rte_free() inside a TAILQ_FOREACH() is safe. BSD has the _SAFE() variant for this purpose but Linux does not. > + } > + > + return ret; > +} -- Adrien Mazarguil 6WIND