> -----Original Message----- > From: Adrien Mazarguil [mailto:adrien.mazarg...@6wind.com] > Sent: Tuesday, December 27, 2016 8:40 PM > To: Xing, Beilei <beilei.x...@intel.com> > Cc: Wu, Jingjing <jingjing...@intel.com>; Zhang, Helin > <helin.zh...@intel.com>; dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v2 15/17] net/i40e: add flow flush function > > 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 <beilei.x...@intel.com> > > --- > > 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. > Yes, thanks for reminder, I'll check it later:)
> > + } > > + > > + return ret; > > +} > > -- > Adrien Mazarguil > 6WIND