From patchwork Tue Mar 1 14:24:50 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Vadai X-Patchwork-Id: 590551 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id D05EE14031D for ; Wed, 2 Mar 2016 01:22:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754102AbcCAOV5 (ORCPT ); Tue, 1 Mar 2016 09:21:57 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:35045 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754076AbcCAOVz (ORCPT ); Tue, 1 Mar 2016 09:21:55 -0500 Received: by mail-wm0-f66.google.com with SMTP id 1so4351327wmg.2 for ; Tue, 01 Mar 2016 06:21:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mvUWMkEIHMV9crWtoJfRWB4hZZotD3ppdgfqx0AStWg=; b=j4gCo+jLQHdv9DVyENDC9UOPZ7aumYaVT2TD3yslt8iLqil0sQrW9Po9zqBgB61+HD 5+VQpzTAS39/Q0v2N13OqXgLiXlZjxp2jTZbuhllRx0ZTB8I1Cu5WzcOtsdzIGJSRWif vmU3fPm0pWRysoBPt24UpZGtQ7K+slvAdMK3OCfBLHhxLNidQj5Ap6GS+zrhUiuxUSTx FJn3N1HN3wJhnV39D4czdX19TtYH82VOSOTRabg42sheYjFfSRUm6xPc8xfkPihL2Lh9 jA66iTLhZ+CrwUEkILoOXbZ3LcgHZwafj+dcyFjnWDJPspV1bCO8zN7Gt61pi4nLXlzE 3Ywg== X-Gm-Message-State: AD7BkJLTzd/1NwqprLt13vIVXGVFfKr7xbEQ8MgoUPf7WZR/OivKMwN7s6l7wurP787QCQ== X-Received: by 10.194.209.204 with SMTP id mo12mr22687438wjc.69.1456842113797; Tue, 01 Mar 2016 06:21:53 -0800 (PST) Received: from office.mtl.com? (212.116.172.4.static.012.net.il. [212.116.172.4]) by smtp.gmail.com with ESMTPSA id w144sm21537406wmd.8.2016.03.01.06.21.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 01 Mar 2016 06:21:52 -0800 (PST) From: Amir Vadai To: "David S. Miller" Cc: netdev@vger.kernel.org, Or Gerlitz , John Fastabend , Saeed Mahameed , Hadar Har-Zion , Jiri Pirko , Amir Vadai Subject: [PATCH net-next 8/8] net/mlx5e: Support offload cls_flower with sskbedit mark action Date: Tue, 1 Mar 2016 16:24:50 +0200 Message-Id: <1456842290-7844-9-git-send-email-amir@vadai.me> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1456842290-7844-1-git-send-email-amir@vadai.me> References: <1456842290-7844-1-git-send-email-amir@vadai.me> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Introduce offloading of skbedit mark action. For example, to mark with 0x1234, all TCP (ip_proto 6) packets arriving to interface ens9: # tc qdisc add dev ens9 ingress # tc filter add dev ens9 protocol ip parent ffff: \ flower ip_proto 6 \ indev ens9 \ action skbedit mark 0x1234 Signed-off-by: Amir Vadai Signed-off-by: Or Gerlitz --- drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 3 +++ drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 16 ++++++++++++++++ drivers/net/ethernet/mellanox/mlx5/core/en_tc.h | 2 ++ 3 files changed, 21 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c index 519a07f..f293afe 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c @@ -35,6 +35,7 @@ #include #include #include "en.h" +#include "en_tc.h" static inline bool mlx5e_rx_hw_stamp(struct mlx5e_tstamp *tstamp) { @@ -224,6 +225,8 @@ static inline void mlx5e_build_rx_skb(struct mlx5_cqe64 *cqe, if (cqe_has_vlan(cqe)) __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), be16_to_cpu(cqe->vlan_info)); + + skb->mark = be32_to_cpu(cqe->sop_drop_qpn) & MLX5E_TC_FLOW_ID_MASK; } int mlx5e_poll_rx_cq(struct mlx5e_cq *cq, int budget) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index 8fee983..22ab439 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -287,6 +288,21 @@ static int parse_tc_actions(struct mlx5e_priv *priv, struct tcf_exts *exts, continue; } + if (is_tcf_skbedit_mark(a)) { + u32 mark = tcf_skbedit_mark(a); + + if (mark & ~MLX5E_TC_FLOW_ID_MASK) { + netdev_warn(priv->netdev, + "Bad flow mark - only 16 bit is supported: 0x%x\n", + mark); + return -EINVAL; + } + + *flow_tag = mark; + *action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; + continue; + } + return -EINVAL; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.h b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.h index f1e7180..155e9bd 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.h @@ -33,6 +33,8 @@ #ifndef __MLX5_EN_TC_H__ #define __MLX5_EN_TC_H__ +#define MLX5E_TC_FLOW_ID_MASK 0x0000ffff + void mlx5e_tc_init(struct mlx5e_priv *priv); void mlx5e_tc_cleanup(struct mlx5e_priv *priv);