Tested-by: Cui, Lunyuan <lunyuanx....@intel.com>

> -----Original Message-----
> From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Wei Zhao
> Sent: Tuesday, May 19, 2020 3:17 PM
> To: dev@dpdk.org
> Cc: sta...@dpdk.org; Xing, Beilei <beilei.x...@intel.com>; Guo, Jia
> <jia....@intel.com>; Zhao1, Wei <wei.zh...@intel.com>
> Subject: [dpdk-dev] [PATCH] net/i40e: fix flow FDIR enable issue
> 
> When we flush flow FDIR, all queues are disabled for FDIR.
> If FDIR rule is created again, then the flow list is empty, as it is the 
> first time to
> create rule after flush fdir filter, so we need to enable FDRI for all queues.
> And also, disable FDIR for queues should be done in function
> i40e_flow_flush_fdir_filter().
> 
> Cc: sta...@dpdk.org
> Fixes: 1491f63c7559 ("net/i40e: fix flush of flow director filter")
> Fixes: 6ae9b2b5e8c2 ("net/i40e: cache flow director enable value in Rx
> queue")
> 
> Signed-off-by: Wei Zhao <wei.zh...@intel.com>
> ---
>  drivers/net/i40e/i40e_flow.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
> index 25c77e7aa..94fc73092 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -3462,6 +3462,12 @@ i40e_flow_parse_fdir_filter(struct rte_eth_dev
> *dev,
>               }
>       }
> 
> +     /* If the flow list is empty, it is the first time to create
> +      * rule after flush fdir filter, so enable fdir.
> +      */
> +     if (TAILQ_EMPTY(&pf->fdir.fdir_list))
> +             i40e_fdir_rx_proc_enable(dev, 1);
> +
>       return 0;
>  err:
>       i40e_fdir_teardown(pf);
> @@ -5330,9 +5336,6 @@ i40e_flow_flush(struct rte_eth_dev *dev, struct
> rte_flow_error *error)
>               return -rte_errno;
>       }
> 
> -     /* Disable FDIR processing as all FDIR rules are now flushed */
> -     i40e_fdir_rx_proc_enable(dev, 0);
> -
>       return ret;
>  }
> 
> @@ -5368,6 +5371,9 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf)
>               for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
>                    pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++)
>                       pf->fdir.inset_flag[pctype] = 0;
> +
> +             /* Disable FDIR processing as all FDIR rules are now flushed
> */
> +             i40e_fdir_rx_proc_enable(dev, 0);
>       }
> 
>       return ret;
> --
> 2.19.1

Reply via email to