Received: by 2002:ac0:b08d:0:0:0:0:0 with SMTP id l13csp4917762imc; Mon, 25 Feb 2019 13:36:05 -0800 (PST) X-Google-Smtp-Source: AHgI3IYEiMGuddznTnu9aXFnKDlpPsUArAXNYOgMcL0XJwWVQsaKuCKKYDzRClYbRzA3qZvhZbVu X-Received: by 2002:a17:902:2e01:: with SMTP id q1mr22376388plb.240.1551130565825; Mon, 25 Feb 2019 13:36:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551130565; cv=none; d=google.com; s=arc-20160816; b=rhshvMIaHBo7MeguDdUXgRj1C7veGoVAELhMndKyIq5Uf5pfBGKFZv/MND4uZL9mUs HPItEeeEldrapujt5/zO6jv8eLMHz3W56mxVGUb3TTRUoRh5zpfk33FZpuDhCcf/CFxj PkKkpHSVr07++DbuMsM/v28gTeMkdYuZOVVrtUNiplaEIoNiKBpIK2Or9lp5kipkFKPG o+CHg6vP3cbLUu6+hPGxarLDmRv1ztkKBX6fK3UusbTyvzN57/uzHOrf/O1YCJv+NTs6 GBwvokQeGUMvUhyEFGhlbDOKNM2CCivjyTQ1/P1RQmhYCVcF6Xd9zAf7FsKIX8cPbhUT aB9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=+iGkGqJuLgQPWJE5mAbeSJV3gAqncz2TO5dalrwcRR0=; b=wFKD6IU0QfUZoi3w0txQ9wXQz0JSOEWvQfoWQfhWTzHorM5KnDkXFWg6MIiug0917W tYBi447JEK1G2k3ZfdLK0IjUNZK5xF1kZqDvIXaGb6tGGRKmd8q17yKVB7huHTnbvthy m8382rRzGnABS8hSB7MarGSHYPrpHZ4ZdW1VqlYuIS04oyFniwwECkEzZaD65x2YS2dR Xov9wPdDubsE2E5q1srL4OIUD/3OeQPenn8kX2rYw/dDJDHlvQV1mBGq6b50QvEaRN2v Q+2m53WAabeRaTSkfa+pyPOIHh1a+iSOa3hGOgw68N5fnuqs/U1NDsE+3dRvR7bt2krd ND7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oue3YpZe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q14si10199346pls.204.2019.02.25.13.35.50; Mon, 25 Feb 2019 13:36:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oue3YpZe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732813AbfBYVeU (ORCPT + 99 others); Mon, 25 Feb 2019 16:34:20 -0500 Received: from mail.kernel.org ([198.145.29.99]:40522 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732803AbfBYVeS (ORCPT ); Mon, 25 Feb 2019 16:34:18 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 25A31217F5; Mon, 25 Feb 2019 21:34:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551130457; bh=N2/EVI7udU4PnUcT98NeL6tL5hwIisH2qKm5oOOBzaY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oue3YpZe7Jyfo5yQ5GOWQ2JqyqkvuxygITwLIwoHt4wgu9EFSSpgYRPLgr9h7RtKl g5G5LdHO/+/8Cp5q39Kyt8DL3Gpnx9u+M5jGRkzN0OcK0UuImyiX3o+LJCI0qJbpzK fxpNCSPJUSRgPQGX9E5y6KUt3fhGGiaBS2VgzKX4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Or Gerlitz , Tonghao Zhang , Saeed Mahameed , "David S. Miller" Subject: [PATCH 4.20 127/183] net/mlx5e: Dont overwrite pedit action when multiple pedit used Date: Mon, 25 Feb 2019 22:11:40 +0100 Message-Id: <20190225195116.114497948@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190225195054.748060397@linuxfoundation.org> References: <20190225195054.748060397@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.20-stable review patch. If anyone has any objections, please let me know. ------------------ From: Tonghao Zhang [ Upstream commit 218d05ce326f9e1b40a56085431fa1068b43d5d9 ] In some case, we may use multiple pedit actions to modify packets. The command shown as below: the last pedit action is effective. $ tc filter add dev netdev_rep parent ffff: protocol ip prio 1 \ flower skip_sw ip_proto icmp dst_ip 3.3.3.3 \ action pedit ex munge ip dst set 192.168.1.100 pipe \ action pedit ex munge eth src set 00:00:00:00:00:01 pipe \ action pedit ex munge eth dst set 00:00:00:00:00:02 pipe \ action csum ip pipe \ action tunnel_key set src_ip 1.1.1.100 dst_ip 1.1.1.200 dst_port 4789 id 100 \ action mirred egress redirect dev vxlan0 To fix it, we add max_mod_hdr_actions to mlx5e_tc_flow_parse_attr struction, max_mod_hdr_actions will store the max pedit action number we support and num_mod_hdr_actions indicates how many pedit action we used, and store all pedit action to mod_hdr_actions. Fixes: d79b6df6b10a ("net/mlx5e: Add parsing of TC pedit actions to HW format") Cc: Or Gerlitz Signed-off-by: Tonghao Zhang Reviewed-by: Or Gerlitz Acked-by: Saeed Mahameed Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 25 ++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -98,6 +98,7 @@ struct mlx5e_tc_flow_parse_attr { struct ip_tunnel_info tun_info; struct mlx5_flow_spec spec; int num_mod_hdr_actions; + int max_mod_hdr_actions; void *mod_hdr_actions; int mirred_ifindex; }; @@ -1888,9 +1889,9 @@ static struct mlx5_fields fields[] = { OFFLOAD(UDP_DPORT, 2, udp.dest, 0), }; -/* On input attr->num_mod_hdr_actions tells how many HW actions can be parsed at - * max from the SW pedit action. On success, it says how many HW actions were - * actually parsed. +/* On input attr->max_mod_hdr_actions tells how many HW actions can be parsed at + * max from the SW pedit action. On success, attr->num_mod_hdr_actions + * says how many HW actions were actually parsed. */ static int offload_pedit_fields(struct pedit_headers *masks, struct pedit_headers *vals, @@ -1914,9 +1915,11 @@ static int offload_pedit_fields(struct p add_vals = &vals[TCA_PEDIT_KEY_EX_CMD_ADD]; action_size = MLX5_UN_SZ_BYTES(set_action_in_add_action_in_auto); - action = parse_attr->mod_hdr_actions; - max_actions = parse_attr->num_mod_hdr_actions; - nactions = 0; + action = parse_attr->mod_hdr_actions + + parse_attr->num_mod_hdr_actions * action_size; + + max_actions = parse_attr->max_mod_hdr_actions; + nactions = parse_attr->num_mod_hdr_actions; for (i = 0; i < ARRAY_SIZE(fields); i++) { f = &fields[i]; @@ -2027,7 +2030,7 @@ static int alloc_mod_hdr_actions(struct if (!parse_attr->mod_hdr_actions) return -ENOMEM; - parse_attr->num_mod_hdr_actions = max_actions; + parse_attr->max_mod_hdr_actions = max_actions; return 0; } @@ -2073,9 +2076,11 @@ static int parse_tc_pedit_action(struct goto out_err; } - err = alloc_mod_hdr_actions(priv, a, namespace, parse_attr); - if (err) - goto out_err; + if (!parse_attr->mod_hdr_actions) { + err = alloc_mod_hdr_actions(priv, a, namespace, parse_attr); + if (err) + goto out_err; + } err = offload_pedit_fields(masks, vals, parse_attr, extack); if (err < 0)