[dpdk-dev] [PATCH v2 15/17] net/i40e: add flow flush function

Adrien Mazarguil adrien.mazarguil at 6wind.com
Tue Dec 27 13:40:15 CET 2016


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.xing at 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.

> +	}
> +
> +	return ret;
> +}

-- 
Adrien Mazarguil
6WIND


More information about the dev mailing list