{"id":819410,"url":"http://patchwork.ozlabs.org/api/patches/819410/?format=json","web_url":"http://patchwork.ozlabs.org/project/netdev/patch/20170928044132.30940-6-saeedm@mellanox.com/","project":{"id":7,"url":"http://patchwork.ozlabs.org/api/projects/7/?format=json","name":"Linux network development","link_name":"netdev","list_id":"netdev.vger.kernel.org","list_email":"netdev@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170928044132.30940-6-saeedm@mellanox.com>","list_archive_url":null,"date":"2017-09-28T04:41:26","name":"[net,05/11] net/mlx5e: Disallow TC offloading of unsupported match/action combinations","commit_ref":null,"pull_url":null,"state":"accepted","archived":true,"hash":"d1d273c92cfe3b82cf7b5ff8e7d98334ecb2ce87","submitter":{"id":65299,"url":"http://patchwork.ozlabs.org/api/people/65299/?format=json","name":"Saeed Mahameed","email":"saeedm@mellanox.com"},"delegate":{"id":34,"url":"http://patchwork.ozlabs.org/api/users/34/?format=json","username":"davem","first_name":"David","last_name":"Miller","email":"davem@davemloft.net"},"mbox":"http://patchwork.ozlabs.org/project/netdev/patch/20170928044132.30940-6-saeedm@mellanox.com/mbox/","series":[{"id":5488,"url":"http://patchwork.ozlabs.org/api/series/5488/?format=json","web_url":"http://patchwork.ozlabs.org/project/netdev/list/?series=5488","date":"2017-09-28T04:41:23","name":"Mellanox, mlx5 fixes 2017-09-28","version":1,"mbox":"http://patchwork.ozlabs.org/series/5488/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/819410/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/819410/checks/","tags":{},"related":[],"headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","X-Original-To":"patchwork-incoming@ozlabs.org","Delivered-To":"patchwork-incoming@ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y2hrT4ghNz9t3x\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 28 Sep 2017 14:42:49 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752028AbdI1Emi (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 28 Sep 2017 00:42:38 -0400","from mail-il-dmz.mellanox.com ([193.47.165.129]:54386 \"EHLO\n\tmellanox.co.il\" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org\n\twith ESMTP id S1751356AbdI1EmF (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 28 Sep 2017 00:42:05 -0400","from Internal Mail-Server by MTLPINE1 (envelope-from\n\tsaeedm@mellanox.com)\n\twith ESMTPS (AES256-SHA encrypted); 28 Sep 2017 06:42:01 +0200","from sws.mtl.labs.mlnx (reg-l-vrt-045-015.mtl.labs.mlnx\n\t[10.135.45.15])\n\tby labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v8S4g1j9011096;\n\tThu, 28 Sep 2017 07:42:01 +0300"],"From":"Saeed Mahameed <saeedm@mellanox.com>","To":"\"David S. Miller\" <davem@davemloft.net>","Cc":"netdev@vger.kernel.org, Or Gerlitz <ogerlitz@mellanox.com>,\n\tSaeed Mahameed <saeedm@mellanox.com>","Subject":"[net 05/11] net/mlx5e: Disallow TC offloading of unsupported\n\tmatch/action combinations","Date":"Thu, 28 Sep 2017 07:41:26 +0300","Message-Id":"<20170928044132.30940-6-saeedm@mellanox.com>","X-Mailer":"git-send-email 2.13.0","In-Reply-To":"<20170928044132.30940-1-saeedm@mellanox.com>","References":"<20170928044132.30940-1-saeedm@mellanox.com>","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"},"content":"From: Or Gerlitz <ogerlitz@mellanox.com>\n\nWhen offloading header re-write, the HW may need to adjust checksums along\nthe packet. For IP traffic, and a case where we are asked to modify fields in\nthe IP header, current HW supports that only for TCP and UDP. Enforce it, in\nthis case fail the offloading attempt for non TCP/UDP packets.\n\nFixes: d7e75a325cb2 ('net/mlx5e: Add offloading of E-Switch TC pedit (header re-write) actions')\nFixes: 2f4fe4cab073 ('net/mlx5e: Add offloading of NIC TC pedit (header re-write) actions')\nSigned-off-by: Or Gerlitz <ogerlitz@mellanox.com>\nReviewed-by: Paul Blakey <paulb@mellanox.com>\nSigned-off-by: Saeed Mahameed <saeedm@mellanox.com>\n---\n drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 70 +++++++++++++++++++++++++\n 1 file changed, 70 insertions(+)","diff":"diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c\nindex 4e2fc016bdd6..d3786005fba7 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c\n@@ -1317,6 +1317,69 @@ static bool csum_offload_supported(struct mlx5e_priv *priv, u32 action, u32 upda\n \treturn true;\n }\n \n+static bool modify_header_match_supported(struct mlx5_flow_spec *spec,\n+\t\t\t\t\t  struct tcf_exts *exts)\n+{\n+\tconst struct tc_action *a;\n+\tbool modify_ip_header;\n+\tLIST_HEAD(actions);\n+\tu8 htype, ip_proto;\n+\tvoid *headers_v;\n+\tu16 ethertype;\n+\tint nkeys, i;\n+\n+\theaders_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, outer_headers);\n+\tethertype = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ethertype);\n+\n+\t/* for non-IP we only re-write MACs, so we're okay */\n+\tif (ethertype != ETH_P_IP && ethertype != ETH_P_IPV6)\n+\t\tgoto out_ok;\n+\n+\tmodify_ip_header = false;\n+\ttcf_exts_to_list(exts, &actions);\n+\tlist_for_each_entry(a, &actions, list) {\n+\t\tif (!is_tcf_pedit(a))\n+\t\t\tcontinue;\n+\n+\t\tnkeys = tcf_pedit_nkeys(a);\n+\t\tfor (i = 0; i < nkeys; i++) {\n+\t\t\thtype = tcf_pedit_htype(a, i);\n+\t\t\tif (htype == TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 ||\n+\t\t\t    htype == TCA_PEDIT_KEY_EX_HDR_TYPE_IP6) {\n+\t\t\t\tmodify_ip_header = true;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tip_proto = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ip_protocol);\n+\tif (modify_ip_header && ip_proto != IPPROTO_TCP && ip_proto != IPPROTO_UDP) {\n+\t\tpr_info(\"can't offload re-write of ip proto %d\\n\", ip_proto);\n+\t\treturn false;\n+\t}\n+\n+out_ok:\n+\treturn true;\n+}\n+\n+static bool actions_match_supported(struct mlx5e_priv *priv,\n+\t\t\t\t    struct tcf_exts *exts,\n+\t\t\t\t    struct mlx5e_tc_flow_parse_attr *parse_attr,\n+\t\t\t\t    struct mlx5e_tc_flow *flow)\n+{\n+\tu32 actions;\n+\n+\tif (flow->flags & MLX5E_TC_FLOW_ESWITCH)\n+\t\tactions = flow->esw_attr->action;\n+\telse\n+\t\tactions = flow->nic_attr->action;\n+\n+\tif (actions & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)\n+\t\treturn modify_header_match_supported(&parse_attr->spec, exts);\n+\n+\treturn true;\n+}\n+\n static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,\n \t\t\t\tstruct mlx5e_tc_flow_parse_attr *parse_attr,\n \t\t\t\tstruct mlx5e_tc_flow *flow)\n@@ -1378,6 +1441,9 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,\n \t\treturn -EINVAL;\n \t}\n \n+\tif (!actions_match_supported(priv, exts, parse_attr, flow))\n+\t\treturn -EOPNOTSUPP;\n+\n \treturn 0;\n }\n \n@@ -1936,6 +2002,10 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,\n \n \t\treturn -EINVAL;\n \t}\n+\n+\tif (!actions_match_supported(priv, exts, parse_attr, flow))\n+\t\treturn -EOPNOTSUPP;\n+\n \treturn err;\n }\n \n","prefixes":["net","05/11"]}