dpdk: Use gnu sed on FreeBSD for header fix ups
[vpp.git] / build / external / patches / dpdk_20.02 / 0018-net-iavf-fix-VF-reset-for-flow-director-rule.patch
1 From ada64daa1a5b5745263b4f265f5b927194219e74 Mon Sep 17 00:00:00 2001
2 From: Simei Su <simei.su@intel.com>
3 Date: Tue, 28 Apr 2020 13:49:19 +0800
4 Subject: [DPDK] net/iavf: fix VF reset for flow director rule
5
6 After VF reset, FDIR rule still takes effect. To solve the issue,
7 this patch adds to flush all flows before flow uninit. VIRTCHNL
8 sends message to PF by Admin Queue, so flow flush should be implemented
9 before Admin Queue shut down.
10
11 Fixes: ff2d0c345c3b ("net/iavf: support generic flow API")
12
13 Signed-off-by: Simei Su <simei.su@intel.com>
14 Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>
15 ---
16  drivers/net/iavf/iavf_ethdev.c       | 1 +
17  drivers/net/iavf/iavf_generic_flow.c | 4 +---
18  drivers/net/iavf/iavf_generic_flow.h | 2 ++
19  3 files changed, 4 insertions(+), 3 deletions(-)
20
21 diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
22 index 117fbc5f7..e09efffd1 100644
23 --- a/drivers/net/iavf/iavf_ethdev.c
24 +++ b/drivers/net/iavf/iavf_ethdev.c
25 @@ -1431,6 +1431,7 @@ iavf_dev_close(struct rte_eth_dev *dev)
26                 IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
27  
28         iavf_dev_stop(dev);
29 +       iavf_flow_flush(dev, NULL);
30         iavf_shutdown_adminq(hw);
31         /* disable uio intr before callback unregister */
32         rte_intr_disable(intr_handle);
33 diff --git a/drivers/net/iavf/iavf_generic_flow.c b/drivers/net/iavf/iavf_generic_flow.c
34 index bca1ffeb3..8c66ac8f2 100644
35 --- a/drivers/net/iavf/iavf_generic_flow.c
36 +++ b/drivers/net/iavf/iavf_generic_flow.c
37 @@ -34,8 +34,6 @@ static struct rte_flow *iavf_flow_create(struct rte_eth_dev *dev,
38  static int iavf_flow_destroy(struct rte_eth_dev *dev,
39                 struct rte_flow *flow,
40                 struct rte_flow_error *error);
41 -static int iavf_flow_flush(struct rte_eth_dev *dev,
42 -               struct rte_flow_error *error);
43  static int iavf_flow_query(struct rte_eth_dev *dev,
44                 struct rte_flow *flow,
45                 const struct rte_flow_action *actions,
46 @@ -966,7 +964,7 @@ iavf_flow_destroy(struct rte_eth_dev *dev,
47         return ret;
48  }
49  
50 -static int
51 +int
52  iavf_flow_flush(struct rte_eth_dev *dev,
53                 struct rte_flow_error *error)
54  {
55 diff --git a/drivers/net/iavf/iavf_generic_flow.h b/drivers/net/iavf/iavf_generic_flow.h
56 index c41ca1bd9..978d0716b 100644
57 --- a/drivers/net/iavf/iavf_generic_flow.h
58 +++ b/drivers/net/iavf/iavf_generic_flow.h
59 @@ -306,6 +306,8 @@ struct iavf_flow_parser_node {
60  void iavf_register_flow_engine(struct iavf_flow_engine *engine);
61  int iavf_flow_init(struct iavf_adapter *ad);
62  void iavf_flow_uninit(struct iavf_adapter *ad);
63 +int iavf_flow_flush(struct rte_eth_dev *dev,
64 +               struct rte_flow_error *error);
65  int iavf_register_parser(struct iavf_flow_parser *parser,
66                          struct iavf_adapter *ad);
67  void iavf_unregister_parser(struct iavf_flow_parser *parser,
68 -- 
69 2.17.1
70