Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/25019/?format=api
https://patches.dpdk.org/api/patches/25019/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/1496385391-12445-3-git-send-email-wei.zhao1@intel.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1496385391-12445-3-git-send-email-wei.zhao1@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1496385391-12445-3-git-send-email-wei.zhao1@intel.com", "date": "2017-06-02T06:36:22", "name": "[dpdk-dev,v2,02/11] net/e1000: restore n-tuple filter", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "cc1562507f95da7cf53e016f2db01e42870f43f5", "submitter": { "id": 495, "url": "https://patches.dpdk.org/api/people/495/?format=api", "name": "Zhao1, Wei", "email": "wei.zhao1@intel.com" }, "delegate": { "id": 319, "url": "https://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/1496385391-12445-3-git-send-email-wei.zhao1@intel.com/mbox/", "series": [], "comments": "https://patches.dpdk.org/api/patches/25019/comments/", "check": "success", "checks": "https://patches.dpdk.org/api/patches/25019/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 66E637D00;\n\tFri, 2 Jun 2017 08:45:39 +0200 (CEST)", "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby dpdk.org (Postfix) with ESMTP id 285D77D02\n\tfor <dev@dpdk.org>; Fri, 2 Jun 2017 08:45:32 +0200 (CEST)", "from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t01 Jun 2017 23:45:32 -0700", "from dpdk1.bj.intel.com ([172.16.182.84])\n\tby fmsmga006.fm.intel.com with ESMTP; 01 Jun 2017 23:45:31 -0700" ], "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.39,283,1493708400\"; d=\"scan'208\";a=\"110013424\"", "From": "Wei Zhao <wei.zhao1@intel.com>", "To": "dev@dpdk.org", "Cc": "wenzhuo.lu@intel.com,\n\tWei Zhao <wei.zhao1@intel.com>", "Date": "Fri, 2 Jun 2017 14:36:22 +0800", "Message-Id": "<1496385391-12445-3-git-send-email-wei.zhao1@intel.com>", "X-Mailer": "git-send-email 2.5.5", "In-Reply-To": "<1496385391-12445-1-git-send-email-wei.zhao1@intel.com>", "References": "<1495523581-56027-1-git-send-email-wei.zhao1@intel.com>\n\t<1496385391-12445-1-git-send-email-wei.zhao1@intel.com>", "Subject": "[dpdk-dev] [PATCH v2 02/11] net/e1000: restore n-tuple filter", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://dpdk.org/ml/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Add support for restoring n-tuple\nfilter in SW.\n\nSigned-off-by: Wei Zhao <wei.zhao1@intel.com>\n---\n drivers/net/e1000/igb_ethdev.c | 262 +++++++++++++++++++++++++----------------\n 1 file changed, 159 insertions(+), 103 deletions(-)", "diff": "diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex 1077870..1e321d6 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -757,6 +757,35 @@ igb_reset_swfw_lock(struct e1000_hw *hw)\n \treturn E1000_SUCCESS;\n }\n \n+/* Remove all ntuple filters of the device */\n+static int igb_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)\n+{\n+\tstruct e1000_filter_info *filter_info =\n+\t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(eth_dev->data->dev_private);\n+\n+\tstruct e1000_5tuple_filter *p_5tuple, *p_5tuple_next;\n+\tstruct e1000_2tuple_filter *p_2tuple, *p_2tuple_next;\n+\n+\tfor (p_5tuple = TAILQ_FIRST(&filter_info->fivetuple_list);\n+\t p_5tuple != NULL; p_5tuple = p_5tuple_next) {\n+\t\tp_5tuple_next = TAILQ_NEXT(p_5tuple, entries);\n+\t\tTAILQ_REMOVE(&filter_info->fivetuple_list,\n+\t\t\t p_5tuple, entries);\n+\t\trte_free(p_5tuple);\n+\t}\n+\tfilter_info->fivetuple_mask = 0;\n+\tfor (p_2tuple = TAILQ_FIRST(&filter_info->twotuple_list);\n+\t p_2tuple != NULL; p_2tuple = p_2tuple_next) {\n+\t\tp_2tuple_next = TAILQ_NEXT(p_2tuple, entries);\n+\t\tTAILQ_REMOVE(&filter_info->twotuple_list,\n+\t\t\t p_2tuple, entries);\n+\t\trte_free(p_2tuple);\n+\t}\n+\tfilter_info->twotuple_mask = 0;\n+\n+\treturn 0;\n+}\n+\n static int\n eth_igb_dev_init(struct rte_eth_dev *eth_dev)\n {\n@@ -967,6 +996,9 @@ eth_igb_dev_uninit(struct rte_eth_dev *eth_dev)\n \t/* clear the SYN filter info */\n \tfilter_info->syn_info = 0;\n \n+\t/* remove all ntuple filters of the device */\n+\tigb_ntuple_filter_uninit(eth_dev);\n+\n \treturn 0;\n }\n \n@@ -1474,8 +1506,6 @@ eth_igb_stop(struct rte_eth_dev *dev)\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_eth_link link;\n \tstruct e1000_flex_filter *p_flex;\n-\tstruct e1000_5tuple_filter *p_5tuple, *p_5tuple_next;\n-\tstruct e1000_2tuple_filter *p_2tuple, *p_2tuple_next;\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \n \tigb_intr_disable(hw);\n@@ -1511,24 +1541,6 @@ eth_igb_stop(struct rte_eth_dev *dev)\n \t}\n \tfilter_info->flex_mask = 0;\n \n-\t/* Remove all ntuple filters of the device */\n-\tfor (p_5tuple = TAILQ_FIRST(&filter_info->fivetuple_list);\n-\t p_5tuple != NULL; p_5tuple = p_5tuple_next) {\n-\t\tp_5tuple_next = TAILQ_NEXT(p_5tuple, entries);\n-\t\tTAILQ_REMOVE(&filter_info->fivetuple_list,\n-\t\t\t p_5tuple, entries);\n-\t\trte_free(p_5tuple);\n-\t}\n-\tfilter_info->fivetuple_mask = 0;\n-\tfor (p_2tuple = TAILQ_FIRST(&filter_info->twotuple_list);\n-\t p_2tuple != NULL; p_2tuple = p_2tuple_next) {\n-\t\tp_2tuple_next = TAILQ_NEXT(p_2tuple, entries);\n-\t\tTAILQ_REMOVE(&filter_info->twotuple_list,\n-\t\t\t p_2tuple, entries);\n-\t\trte_free(p_2tuple);\n-\t}\n-\tfilter_info->twotuple_mask = 0;\n-\n \tif (!rte_intr_allow_others(intr_handle))\n \t\t/* resume to the default handler */\n \t\trte_intr_callback_register(intr_handle,\n@@ -3737,6 +3749,54 @@ igb_2tuple_filter_lookup(struct e1000_2tuple_filter_list *filter_list,\n \treturn NULL;\n }\n \n+/* inject a igb 2tuple filter to HW */\n+static inline void\n+igb_inject_2uple_filter(struct rte_eth_dev *dev,\n+\t\t\t struct e1000_2tuple_filter *filter)\n+{\n+\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tuint32_t ttqf = E1000_TTQF_DISABLE_MASK;\n+\tuint32_t imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n+\tint i;\n+\n+\ti = filter->index;\n+\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n+\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n+\t\timir |= E1000_IMIR_PORT_BP;\n+\telse\n+\t\timir &= ~E1000_IMIR_PORT_BP;\n+\n+\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n+\n+\tttqf |= E1000_TTQF_QUEUE_ENABLE;\n+\tttqf |= (uint32_t)(filter->queue << E1000_TTQF_QUEUE_SHIFT);\n+\tttqf |= (uint32_t)(filter->filter_info.proto &\n+\t\t\t\t\t\tE1000_TTQF_PROTOCOL_MASK);\n+\tif (filter->filter_info.proto_mask == 0)\n+\t\tttqf &= ~E1000_TTQF_MASK_ENABLE;\n+\n+\t/* tcp flags bits setting. */\n+\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n+\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n+\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n+\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n+\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n+\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n+\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n+\t} else {\n+\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n+\t}\n+\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n+\tE1000_WRITE_REG(hw, E1000_TTQF(i), ttqf);\n+\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+}\n+\n /*\n * igb_add_2tuple_filter - add a 2tuple filter\n *\n@@ -3752,12 +3812,9 @@ static int\n igb_add_2tuple_filter(struct rte_eth_dev *dev,\n \t\t\tstruct rte_eth_ntuple_filter *ntuple_filter)\n {\n-\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct e1000_filter_info *filter_info =\n \t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n \tstruct e1000_2tuple_filter *filter;\n-\tuint32_t ttqf = E1000_TTQF_DISABLE_MASK;\n-\tuint32_t imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n \tint i, ret;\n \n \tfilter = rte_zmalloc(\"e1000_2tuple_filter\",\n@@ -3799,39 +3856,7 @@ igb_add_2tuple_filter(struct rte_eth_dev *dev,\n \t\treturn -ENOSYS;\n \t}\n \n-\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n-\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n-\t\timir |= E1000_IMIR_PORT_BP;\n-\telse\n-\t\timir &= ~E1000_IMIR_PORT_BP;\n-\n-\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n-\n-\tttqf |= E1000_TTQF_QUEUE_ENABLE;\n-\tttqf |= (uint32_t)(filter->queue << E1000_TTQF_QUEUE_SHIFT);\n-\tttqf |= (uint32_t)(filter->filter_info.proto & E1000_TTQF_PROTOCOL_MASK);\n-\tif (filter->filter_info.proto_mask == 0)\n-\t\tttqf &= ~E1000_TTQF_MASK_ENABLE;\n-\n-\t/* tcp flags bits setting. */\n-\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n-\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n-\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n-\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n-\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n-\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n-\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n-\t} else\n-\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n-\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n-\tE1000_WRITE_REG(hw, E1000_TTQF(i), ttqf);\n-\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+\tigb_inject_2uple_filter(dev, filter);\n \treturn 0;\n }\n \n@@ -4205,6 +4230,64 @@ igb_5tuple_filter_lookup_82576(struct e1000_5tuple_filter_list *filter_list,\n \treturn NULL;\n }\n \n+/* inject a igb 5-tuple filter to HW */\n+static inline void\n+igb_inject_5tuple_filter_82576(struct rte_eth_dev *dev,\n+\t\t\t struct e1000_5tuple_filter *filter)\n+{\n+\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tuint32_t ftqf = E1000_FTQF_VF_BP | E1000_FTQF_MASK;\n+\tuint32_t spqf, imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n+\tuint8_t i;\n+\n+\ti = filter->index;\n+\tftqf |= filter->filter_info.proto & E1000_FTQF_PROTOCOL_MASK;\n+\tif (filter->filter_info.src_ip_mask == 0) /* 0b means compare. */\n+\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_ADDR_BP;\n+\tif (filter->filter_info.dst_ip_mask == 0)\n+\t\tftqf &= ~E1000_FTQF_MASK_DEST_ADDR_BP;\n+\tif (filter->filter_info.src_port_mask == 0)\n+\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP;\n+\tif (filter->filter_info.proto_mask == 0)\n+\t\tftqf &= ~E1000_FTQF_MASK_PROTO_BP;\n+\tftqf |= (filter->queue << E1000_FTQF_QUEUE_SHIFT) &\n+\t\tE1000_FTQF_QUEUE_MASK;\n+\tftqf |= E1000_FTQF_QUEUE_ENABLE;\n+\tE1000_WRITE_REG(hw, E1000_FTQF(i), ftqf);\n+\tE1000_WRITE_REG(hw, E1000_DAQF(i), filter->filter_info.dst_ip);\n+\tE1000_WRITE_REG(hw, E1000_SAQF(i), filter->filter_info.src_ip);\n+\n+\tspqf = filter->filter_info.src_port & E1000_SPQF_SRCPORT;\n+\tE1000_WRITE_REG(hw, E1000_SPQF(i), spqf);\n+\n+\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n+\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n+\t\timir |= E1000_IMIR_PORT_BP;\n+\telse\n+\t\timir &= ~E1000_IMIR_PORT_BP;\n+\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n+\n+\t/* tcp flags bits setting. */\n+\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n+\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n+\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n+\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n+\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n+\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n+\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n+\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n+\t} else {\n+\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n+\t}\n+\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n+\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+}\n+\n /*\n * igb_add_5tuple_filter_82576 - add a 5tuple filter\n *\n@@ -4220,12 +4303,9 @@ static int\n igb_add_5tuple_filter_82576(struct rte_eth_dev *dev,\n \t\t\tstruct rte_eth_ntuple_filter *ntuple_filter)\n {\n-\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \tstruct e1000_filter_info *filter_info =\n \t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n \tstruct e1000_5tuple_filter *filter;\n-\tuint32_t ftqf = E1000_FTQF_VF_BP | E1000_FTQF_MASK;\n-\tuint32_t spqf, imir, imir_ext = E1000_IMIREXT_SIZE_BP;\n \tuint8_t i;\n \tint ret;\n \n@@ -4269,50 +4349,7 @@ igb_add_5tuple_filter_82576(struct rte_eth_dev *dev,\n \t\treturn -ENOSYS;\n \t}\n \n-\tftqf |= filter->filter_info.proto & E1000_FTQF_PROTOCOL_MASK;\n-\tif (filter->filter_info.src_ip_mask == 0) /* 0b means compare. */\n-\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_ADDR_BP;\n-\tif (filter->filter_info.dst_ip_mask == 0)\n-\t\tftqf &= ~E1000_FTQF_MASK_DEST_ADDR_BP;\n-\tif (filter->filter_info.src_port_mask == 0)\n-\t\tftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP;\n-\tif (filter->filter_info.proto_mask == 0)\n-\t\tftqf &= ~E1000_FTQF_MASK_PROTO_BP;\n-\tftqf |= (filter->queue << E1000_FTQF_QUEUE_SHIFT) &\n-\t\tE1000_FTQF_QUEUE_MASK;\n-\tftqf |= E1000_FTQF_QUEUE_ENABLE;\n-\tE1000_WRITE_REG(hw, E1000_FTQF(i), ftqf);\n-\tE1000_WRITE_REG(hw, E1000_DAQF(i), filter->filter_info.dst_ip);\n-\tE1000_WRITE_REG(hw, E1000_SAQF(i), filter->filter_info.src_ip);\n-\n-\tspqf = filter->filter_info.src_port & E1000_SPQF_SRCPORT;\n-\tE1000_WRITE_REG(hw, E1000_SPQF(i), spqf);\n-\n-\timir = (uint32_t)(filter->filter_info.dst_port & E1000_IMIR_DSTPORT);\n-\tif (filter->filter_info.dst_port_mask == 1) /* 1b means not compare. */\n-\t\timir |= E1000_IMIR_PORT_BP;\n-\telse\n-\t\timir &= ~E1000_IMIR_PORT_BP;\n-\timir |= filter->filter_info.priority << E1000_IMIR_PRIORITY_SHIFT;\n-\n-\t/* tcp flags bits setting. */\n-\tif (filter->filter_info.tcp_flags & TCP_FLAG_ALL) {\n-\t\tif (filter->filter_info.tcp_flags & TCP_URG_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_URG;\n-\t\tif (filter->filter_info.tcp_flags & TCP_ACK_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_ACK;\n-\t\tif (filter->filter_info.tcp_flags & TCP_PSH_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_PSH;\n-\t\tif (filter->filter_info.tcp_flags & TCP_RST_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_RST;\n-\t\tif (filter->filter_info.tcp_flags & TCP_SYN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_SYN;\n-\t\tif (filter->filter_info.tcp_flags & TCP_FIN_FLAG)\n-\t\t\timir_ext |= E1000_IMIREXT_CTRL_FIN;\n-\t} else\n-\t\timir_ext |= E1000_IMIREXT_CTRL_BP;\n-\tE1000_WRITE_REG(hw, E1000_IMIR(i), imir);\n-\tE1000_WRITE_REG(hw, E1000_IMIREXT(i), imir_ext);\n+\tigb_inject_5tuple_filter_82576(dev, filter);\n \treturn 0;\n }\n \n@@ -5437,6 +5474,24 @@ eth_igb_configure_msix_intr(struct rte_eth_dev *dev)\n \tE1000_WRITE_FLUSH(hw);\n }\n \n+/* restore n-tuple filter */\n+static inline void\n+igb_ntuple_filter_restore(struct rte_eth_dev *dev)\n+{\n+\tstruct e1000_filter_info *filter_info =\n+\t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n+\tstruct e1000_5tuple_filter *p_5tuple;\n+\tstruct e1000_2tuple_filter *p_2tuple;\n+\n+\tTAILQ_FOREACH(p_5tuple, &filter_info->fivetuple_list, entries) {\n+\t\tigb_inject_5tuple_filter_82576(dev, p_5tuple);\n+\t}\n+\n+\tTAILQ_FOREACH(p_2tuple, &filter_info->twotuple_list, entries) {\n+\t\tigb_inject_2uple_filter(dev, p_2tuple);\n+\t}\n+}\n+\n /* restore SYN filter */\n static inline void\n igb_syn_filter_restore(struct rte_eth_dev *dev)\n@@ -5458,6 +5513,7 @@ igb_syn_filter_restore(struct rte_eth_dev *dev)\n static int\n igb_filter_restore(struct rte_eth_dev *dev)\n {\n+\tigb_ntuple_filter_restore(dev);\n \tigb_syn_filter_restore(dev);\n \n \treturn 0;\n", "prefixes": [ "dpdk-dev", "v2", "02/11" ] }{ "id": 25019, "url": "