Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/65964/?format=api
http://patches.dpdk.org/api/patches/65964/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1582206824-103222-2-git-send-email-suanmingm@mellanox.com/", "project": { "id": 1, "url": "http://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": "<1582206824-103222-2-git-send-email-suanmingm@mellanox.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1582206824-103222-2-git-send-email-suanmingm@mellanox.com", "date": "2020-02-20T13:53:43", "name": "[v3,1/2] net/mlx5: fix layer flags missing in metadata", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "fe1440d86eb26a831bc00b8e2286c4ea6d7a317a", "submitter": { "id": 1358, "url": "http://patches.dpdk.org/api/people/1358/?format=api", "name": "Suanming Mou", "email": "suanmingm@mellanox.com" }, "delegate": { "id": 3268, "url": "http://patches.dpdk.org/api/users/3268/?format=api", "username": "rasland", "first_name": "Raslan", "last_name": "Darawsheh", "email": "rasland@nvidia.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1582206824-103222-2-git-send-email-suanmingm@mellanox.com/mbox/", "series": [ { "id": 8634, "url": "http://patches.dpdk.org/api/series/8634/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8634", "date": "2020-02-20T13:53:42", "name": "net/mlx5: copy the item flags from prefix flow", "version": 3, "mbox": "http://patches.dpdk.org/series/8634/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/65964/comments/", "check": "fail", "checks": "http://patches.dpdk.org/api/patches/65964/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 843A1A0556;\n\tThu, 20 Feb 2020 14:53:56 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id D8D851BFAD;\n\tThu, 20 Feb 2020 14:53:50 +0100 (CET)", "from git-send-mailer.rdmz.labs.mlnx (unknown [37.142.13.130])\n by dpdk.org (Postfix) with ESMTP id 01C231BF98;\n Thu, 20 Feb 2020 14:53:48 +0100 (CET)" ], "From": "Suanming Mou <suanmingm@mellanox.com>", "To": "matan@mellanox.com,\n\tviacheslavo@mellanox.com", "Cc": "dev@dpdk.org,\n\trasland@mellanox.com,\n\tstable@dpdk.org", "Date": "Thu, 20 Feb 2020 15:53:43 +0200", "Message-Id": "<1582206824-103222-2-git-send-email-suanmingm@mellanox.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1582206824-103222-1-git-send-email-suanmingm@mellanox.com>", "References": "<1582122664-54731-1-git-send-email-suanmingm@mellanox.com>\n <1582206824-103222-1-git-send-email-suanmingm@mellanox.com>", "Subject": "[dpdk-dev] [PATCH v3 1/2] net/mlx5: fix layer flags missing in\n\tmetadata", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Metadata suffix subflow inherits the RSS needed hash_fields from the\nprefix subflow as the suffix subflow only has the tag match item unable\nto generate the full original hash_fields for RSS action.\n\nUnfortunately, hash_fields will only be generated if flow has RSS action.\nSo it means the prefix flow won't generate the hash_fields as the RSS\naction has been split to the suffix flow.\n\nCopy the layer flags from prefix subflow to suffix subflow to help the\nsuffix subflow to generate the correct hash_fields itself.\n\nFixes: 71e254bc0294 (\"net/mlx5: split Rx flows to provide metadata copy\")\nCc: viacheslavo@mellanox.com\nCc: stable@dpdk.org\n\nSigned-off-by: Suanming Mou <suanmingm@mellanox.com>\nAcked-by: Matan Azrad <matan@mellanox.com>\n---\n drivers/net/mlx5/mlx5_flow.c | 67 +++++++++++++++++++++++++++++++++++------\n drivers/net/mlx5/mlx5_flow_dv.c | 6 +++-\n 2 files changed, 62 insertions(+), 11 deletions(-)", "diff": "diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c\nindex ce5aded..9267858 100644\n--- a/drivers/net/mlx5/mlx5_flow.c\n+++ b/drivers/net/mlx5/mlx5_flow.c\n@@ -2727,6 +2727,43 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n }\n \n /**\n+ * Get layer flags from the prefix flow.\n+ *\n+ * Some flows may be split to several subflows, the prefix subflow gets the\n+ * match items and the suffix sub flow gets the actions.\n+ * Some actions need the user defined match item flags to get the detail for\n+ * the action.\n+ * This function helps the suffix flow to get the item layer flags from prefix\n+ * subflow.\n+ *\n+ * @param[in] dev_flow\n+ * Pointer the created preifx subflow.\n+ *\n+ * @return\n+ * The layers get from prefix subflow.\n+ */\n+static inline uint64_t\n+flow_get_prefix_layer_flags(struct mlx5_flow *dev_flow)\n+{\n+\tuint64_t layers = 0;\n+\n+\t/* If no decap actions, use the layers directly. */\n+\tif (!(dev_flow->actions & MLX5_FLOW_ACTION_DECAP))\n+\t\treturn dev_flow->layers;\n+\t/* Convert L3 layers with decap action. */\n+\tif (dev_flow->layers & MLX5_FLOW_LAYER_INNER_L3_IPV4)\n+\t\tlayers |= MLX5_FLOW_LAYER_OUTER_L3_IPV4;\n+\telse if (dev_flow->layers & MLX5_FLOW_LAYER_INNER_L3_IPV6)\n+\t\tlayers |= MLX5_FLOW_LAYER_OUTER_L3_IPV6;\n+\t/* Convert L4 layers with decap action. */\n+\tif (dev_flow->layers & MLX5_FLOW_LAYER_INNER_L4_TCP)\n+\t\tlayers |= MLX5_FLOW_LAYER_OUTER_L4_TCP;\n+\telse if (dev_flow->layers & MLX5_FLOW_LAYER_INNER_L4_UDP)\n+\t\tlayers |= MLX5_FLOW_LAYER_OUTER_L4_UDP;\n+\treturn layers;\n+}\n+\n+/**\n * Get QUEUE/RSS action from the action list.\n *\n * @param[in] actions\n@@ -3406,6 +3443,8 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n * Parent flow structure pointer.\n * @param[in, out] sub_flow\n * Pointer to return the created subflow, may be NULL.\n+ * @param[in] prefix_layers\n+ * Prefix subflow layers, may be 0.\n * @param[in] attr\n * Flow rule attributes.\n * @param[in] items\n@@ -3423,6 +3462,7 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n flow_create_split_inner(struct rte_eth_dev *dev,\n \t\t\tstruct rte_flow *flow,\n \t\t\tstruct mlx5_flow **sub_flow,\n+\t\t\tuint64_t prefix_layers,\n \t\t\tconst struct rte_flow_attr *attr,\n \t\t\tconst struct rte_flow_item items[],\n \t\t\tconst struct rte_flow_action actions[],\n@@ -3437,6 +3477,12 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \tdev_flow->external = external;\n \t/* Subflow object was created, we must include one in the list. */\n \tLIST_INSERT_HEAD(&flow->dev_flows, dev_flow, next);\n+\t/*\n+\t * If dev_flow is as one of the suffix flow, some actions in suffix\n+\t * flow may need some user defined item layer flags.\n+\t */\n+\tif (prefix_layers)\n+\t\tdev_flow->layers = prefix_layers;\n \tif (sub_flow)\n \t\t*sub_flow = dev_flow;\n \treturn flow_drv_translate(dev, dev_flow, attr, items, actions, error);\n@@ -3768,8 +3814,9 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \tif (!config->dv_flow_en ||\n \t config->dv_xmeta_en == MLX5_XMETA_MODE_LEGACY ||\n \t !mlx5_flow_ext_mreg_supported(dev))\n-\t\treturn flow_create_split_inner(dev, flow, NULL, attr, items,\n-\t\t\t\t\t actions, external, error);\n+\t\treturn flow_create_split_inner(dev, flow, NULL, 0,\n+\t\t\t\t\t attr, items, actions, external,\n+\t\t\t\t\t error);\n \tactions_n = flow_parse_qrss_action(actions, &qrss);\n \tif (qrss) {\n \t\t/* Exclude hairpin flows from splitting. */\n@@ -3850,9 +3897,9 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t\t\tgoto exit;\n \t}\n \t/* Add the unmodified original or prefix subflow. */\n-\tret = flow_create_split_inner(dev, flow, &dev_flow, attr, items,\n-\t\t\t\t ext_actions ? ext_actions : actions,\n-\t\t\t\t external, error);\n+\tret = flow_create_split_inner(dev, flow, &dev_flow, 0, attr,\n+\t\t\t\t items, ext_actions ? ext_actions :\n+\t\t\t\t actions, external, error);\n \tif (ret < 0)\n \t\tgoto exit;\n \tMLX5_ASSERT(dev_flow);\n@@ -3886,7 +3933,7 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t\t\t\t.type = RTE_FLOW_ACTION_TYPE_END,\n \t\t\t},\n \t\t};\n-\t\tuint64_t hash_fields = dev_flow->hash_fields;\n+\t\tuint64_t layers = flow_get_prefix_layer_flags(dev_flow);\n \n \t\t/*\n \t\t * Configure the tag item only if there is no meter subflow.\n@@ -3913,14 +3960,13 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t\t}\n \t\tdev_flow = NULL;\n \t\t/* Add suffix subflow to execute Q/RSS. */\n-\t\tret = flow_create_split_inner(dev, flow, &dev_flow,\n+\t\tret = flow_create_split_inner(dev, flow, &dev_flow, layers,\n \t\t\t\t\t &q_attr, mtr_sfx ? items :\n \t\t\t\t\t q_items, q_actions,\n \t\t\t\t\t external, error);\n \t\tif (ret < 0)\n \t\t\tgoto exit;\n \t\tMLX5_ASSERT(dev_flow);\n-\t\tdev_flow->hash_fields = hash_fields;\n \t}\n \n exit:\n@@ -4009,8 +4055,9 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t\t\tgoto exit;\n \t\t}\n \t\t/* Add the prefix subflow. */\n-\t\tret = flow_create_split_inner(dev, flow, &dev_flow, attr, items,\n-\t\t\t\t\t\t pre_actions, external, error);\n+\t\tret = flow_create_split_inner(dev, flow, &dev_flow, 0, attr,\n+\t\t\t\t\t items, pre_actions, external,\n+\t\t\t\t\t error);\n \t\tif (ret) {\n \t\t\tret = -rte_errno;\n \t\t\tgoto exit;\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex b6e50b1..19f5b61 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -7813,7 +7813,11 @@ struct field_modify_info modify_tcp[] = {\n \tMLX5_ASSERT(!flow_dv_check_valid_spec(matcher.mask.buf,\n \t\t\t\t\t dev_flow->dv.value.buf));\n #endif\n-\tdev_flow->layers = item_flags;\n+\t/*\n+\t * Layers may be already initialized from prefix flow if this dev_flow\n+\t * is the suffix flow.\n+\t */\n+\tdev_flow->layers |= item_flags;\n \tif (action_flags & MLX5_FLOW_ACTION_RSS)\n \t\tflow_dv_hashfields_set(dev_flow);\n \t/* Register matcher. */\n", "prefixes": [ "v3", "1/2" ] }{ "id": 65964, "url": "