From patchwork Mon Dec 30 14:30:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216448 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="mF95+ayj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfy63b5Rz9sRC for ; Tue, 31 Dec 2019 01:31:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727551AbfL3Obi (ORCPT ); Mon, 30 Dec 2019 09:31:38 -0500 Received: from fd.dlink.ru ([178.170.168.18]:39574 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727397AbfL3Obi (ORCPT ); Mon, 30 Dec 2019 09:31:38 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id CC7B41B21836; Mon, 30 Dec 2019 17:31:33 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru CC7B41B21836 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716293; bh=L55d4XdjAtvKL0l9HxmdxPvldFzgURGS4JiXQm8SXdA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mF95+ayjq0zPIcEQSB1FEez6ZDvINbvzYO3CSeoG6RFJNruhxeoyeLh09U3gfsQza YdcpYgteE2a0tAvF8SGGwkDCWonmM8OPFQVkZ7lvKg7IBM7Gy0RzTgsIbNkBQLjmnv 9AQkbrYqtw8Y1jfa43jj34h4mzJuKY3ra/maXCCc= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 83F871B20206; Mon, 30 Dec 2019 17:31:05 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 83F871B20206 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id C95A91B229D0; Mon, 30 Dec 2019 17:31:03 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:03 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 01/19] net: dsa: make .flow_dissect() callback returning void Date: Mon, 30 Dec 2019 17:30:09 +0300 Message-Id: <20191230143028.27313-2-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There are no tag protocols which return non-zero values from flow_dissect() callback. Remove it to simplify code and save some object size. If a particular tagger can't calculate offset and proto for some reason, it can simply leave the original values untouched. Signed-off-by: Alexander Lobakin Reviewed-by: Florian Fainelli --- include/net/dsa.h | 5 ++--- net/core/flow_dissector.c | 8 ++++---- net/dsa/tag_dsa.c | 5 ++--- net/dsa/tag_edsa.c | 5 ++--- net/dsa/tag_mtk.c | 6 ++---- net/dsa/tag_qca.c | 6 ++---- 6 files changed, 14 insertions(+), 21 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index da5578db228e..633d9894ab87 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -72,8 +72,8 @@ struct dsa_device_ops { struct sk_buff *(*xmit)(struct sk_buff *skb, struct net_device *dev); struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt); - int (*flow_dissect)(const struct sk_buff *skb, __be16 *proto, - int *offset); + void (*flow_dissect)(const struct sk_buff *skb, __be16 *proto, + int *offset); /* Used to determine which traffic should match the DSA filter in * eth_type_trans, and which, if any, should bypass it and be processed * as regular on the master net device. @@ -774,4 +774,3 @@ static struct dsa_tag_driver *dsa_tag_driver_array[] = { \ }; \ module_dsa_tag_drivers(dsa_tag_driver_array) #endif - diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 2dbbb030fbed..2c9d8c7c76b3 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -971,12 +971,12 @@ bool __skb_flow_dissect(const struct net *net, #if IS_ENABLED(CONFIG_NET_DSA) if (unlikely(skb->dev && netdev_uses_dsa(skb->dev) && proto == htons(ETH_P_XDSA))) { - const struct dsa_device_ops *ops; + typeof_member(struct dsa_device_ops, flow_dissect) fd; int offset = 0; - ops = skb->dev->dsa_ptr->tag_ops; - if (ops->flow_dissect && - !ops->flow_dissect(skb, &proto, &offset)) { + fd = skb->dev->dsa_ptr->tag_ops->flow_dissect; + if (fd) { + fd(skb, &proto, &offset); hlen -= offset; nhoff += offset; } diff --git a/net/dsa/tag_dsa.c b/net/dsa/tag_dsa.c index 7ddec9794477..ef15aee58dfc 100644 --- a/net/dsa/tag_dsa.c +++ b/net/dsa/tag_dsa.c @@ -142,12 +142,11 @@ static struct sk_buff *dsa_rcv(struct sk_buff *skb, struct net_device *dev, return skb; } -static int dsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, - int *offset) +static void dsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) { *offset = 4; *proto = ((__be16 *)skb->data)[1]; - return 0; } static const struct dsa_device_ops dsa_netdev_ops = { diff --git a/net/dsa/tag_edsa.c b/net/dsa/tag_edsa.c index e8eaa804ccb9..37a99254b411 100644 --- a/net/dsa/tag_edsa.c +++ b/net/dsa/tag_edsa.c @@ -161,12 +161,11 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev, return skb; } -static int edsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, - int *offset) +static void edsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) { *offset = 8; *proto = ((__be16 *)skb->data)[3]; - return 0; } static const struct dsa_device_ops edsa_netdev_ops = { diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c index b5705cba8318..c3ad7b7b142a 100644 --- a/net/dsa/tag_mtk.c +++ b/net/dsa/tag_mtk.c @@ -89,13 +89,11 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev, return skb; } -static int mtk_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, - int *offset) +static void mtk_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) { *offset = 4; *proto = ((__be16 *)skb->data)[1]; - - return 0; } static const struct dsa_device_ops mtk_netdev_ops = { diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c index c95885215525..8e2dbaaffe59 100644 --- a/net/dsa/tag_qca.c +++ b/net/dsa/tag_qca.c @@ -90,13 +90,11 @@ static struct sk_buff *qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, return skb; } -static int qca_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, - int *offset) +static void qca_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) { *offset = QCA_HDR_LEN; *proto = ((__be16 *)skb->data)[0]; - - return 0; } static const struct dsa_device_ops qca_netdev_ops = { From patchwork Mon Dec 30 14:30:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216449 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="mqnQsIA+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfyG3WGVz9sRC for ; Tue, 31 Dec 2019 01:31:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727576AbfL3Obq (ORCPT ); Mon, 30 Dec 2019 09:31:46 -0500 Received: from fd.dlink.ru ([178.170.168.18]:39822 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727397AbfL3Obq (ORCPT ); Mon, 30 Dec 2019 09:31:46 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 416111B2189B; Mon, 30 Dec 2019 17:31:43 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 416111B2189B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716303; bh=GSv5uxS8JB5ZFL1df4FA5xdldqWieg3v4SkX8gUq2MY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mqnQsIA+caFid+jH4yK8H0odndwsP0uIaIt8YUT+ukX7t/jLzShPmdY9kPh98ogfG rZDnSwhTDruv0lx/leNjumvsjn2gDn9WA1DtUHSzdXNW22oX1jfYoBadbs2zpLOjML 9jbuUhalzrWEC4jgmQpxwJsEEQTQkGcb9myd2l+A= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 286831B20805; Mon, 30 Dec 2019 17:31:07 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 286831B20805 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 71F111B229CB; Mon, 30 Dec 2019 17:31:05 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:05 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 02/19] net: dsa: add GRO support infrastructure Date: Mon, 30 Dec 2019 17:30:10 +0300 Message-Id: <20191230143028.27313-3-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add .gro_receive() (with shortcut) and .gro_complete() callbacks to tagger ops and basic ETH_P_XDSA packet_offload with wrappers around them, so DSA-tagged frames can now be processed within GRO layer if the particular tagger implements this (will be added in subsequent patches). Note: no need to take RCU read locks in dsa_gro_receive() and dsa_gro_complete() as dev->cpu_dp is not RCU-protected, at least for now. The corresponding locks must be taken in the actual tagger callbacks. Signed-off-by: Alexander Lobakin --- include/net/dsa.h | 5 +++++ net/dsa/dsa.c | 43 +++++++++++++++++++++++++++++++++++++++++-- net/dsa/dsa2.c | 1 + 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 633d9894ab87..8a7f80709d51 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -79,6 +79,9 @@ struct dsa_device_ops { * as regular on the master net device. */ bool (*filter)(const struct sk_buff *skb, struct net_device *dev); + struct sk_buff *(*gro_receive)(struct list_head *head, + struct sk_buff *skb); + int (*gro_complete)(struct sk_buff *skb, int nhoff); unsigned int overhead; const char *name; enum dsa_tag_protocol proto; @@ -170,6 +173,8 @@ struct dsa_port { struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt); bool (*filter)(const struct sk_buff *skb, struct net_device *dev); + struct sk_buff *(*gro_receive)(struct list_head *head, + struct sk_buff *skb); enum { DSA_PORT_TYPE_UNUSED = 0, diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index 17281fec710c..9a8d8ce7473c 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -243,6 +243,34 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev, return 0; } +static struct sk_buff *dsa_gro_receive(struct list_head *head, + struct sk_buff *skb) +{ + const struct dsa_port *cpu_dp = skb->dev->dsa_ptr; + struct sk_buff *pp = NULL; + int flush = 1; + + if (unlikely(!cpu_dp) || !cpu_dp->gro_receive) + goto flush; + + pp = cpu_dp->gro_receive(head, skb); + flush = 0; + +flush: + skb_gro_flush_final(skb, pp, flush); + return pp; +} + +static int dsa_gro_complete(struct sk_buff *skb, int nhoff) +{ + const struct dsa_port *cpu_dp = skb->dev->dsa_ptr; + + if (likely(cpu_dp) && cpu_dp->tag_ops->gro_complete) + return cpu_dp->tag_ops->gro_complete(skb, nhoff); + + return -ENOENT; +} + #ifdef CONFIG_PM_SLEEP static bool dsa_is_port_initialized(struct dsa_switch *ds, int p) { @@ -298,8 +326,17 @@ EXPORT_SYMBOL_GPL(dsa_switch_resume); #endif static struct packet_type dsa_pack_type __read_mostly = { - .type = cpu_to_be16(ETH_P_XDSA), - .func = dsa_switch_rcv, + .type = htons(ETH_P_XDSA), + .func = dsa_switch_rcv, +}; + +static struct packet_offload dsa_pack_offload __read_mostly = { + .type = htons(ETH_P_XDSA), + .priority = 10, + .callbacks = { + .gro_receive = dsa_gro_receive, + .gro_complete = dsa_gro_complete, + }, }; static struct workqueue_struct *dsa_owq; @@ -430,6 +467,7 @@ static int __init dsa_init_module(void) goto register_notifier_fail; dev_add_pack(&dsa_pack_type); + dev_add_offload(&dsa_pack_offload); dsa_tag_driver_register(&DSA_TAG_DRIVER_NAME(none_ops), THIS_MODULE); @@ -448,6 +486,7 @@ static void __exit dsa_cleanup_module(void) dsa_tag_driver_unregister(&DSA_TAG_DRIVER_NAME(none_ops)); dsa_slave_unregister_notifier(); + dev_remove_offload(&dsa_pack_offload); dev_remove_pack(&dsa_pack_type); destroy_workqueue(dsa_owq); } diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index c66abbed4daf..5f66e0280e8e 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -631,6 +631,7 @@ static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master) } dp->type = DSA_PORT_TYPE_CPU; + dp->gro_receive = tag_ops->gro_receive; dp->filter = tag_ops->filter; dp->rcv = tag_ops->rcv; dp->tag_ops = tag_ops; From patchwork Mon Dec 30 14:30:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216450 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="iQLU0DZf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfyR2t9Dz9sR7 for ; Tue, 31 Dec 2019 01:31:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727597AbfL3Obz (ORCPT ); Mon, 30 Dec 2019 09:31:55 -0500 Received: from mail.dlink.ru ([178.170.168.18]:40070 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727397AbfL3Obz (ORCPT ); Mon, 30 Dec 2019 09:31:55 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id EC3991B205DF; Mon, 30 Dec 2019 17:31:52 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru EC3991B205DF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716313; bh=18voDyGBMtcwId3z4bi4wS1wyOebnKJGhqqk04an6a0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=iQLU0DZfS2ARZJQSoCBYhABscHZQr0JgJNiEKhpGUuZBFdlf2/mzRHdDXeUsh8qbk Jy7Q+RLhH+MN/jiJ2fTC4aoUW8UfsFiIe5JB75aFQZ3efdWXA1fwcSZbKJWxDvBCMi blmJygWcLItkSbGCtLgIBcHq5eg1+Qf15PfC9Lh0= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id D7C7E1B205DF; Mon, 30 Dec 2019 17:31:08 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru D7C7E1B205DF Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 1E48A1B229D1; Mon, 30 Dec 2019 17:31:07 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:07 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 03/19] net: dsa: tag_ar9331: add .flow_dissect() callback Date: Mon, 30 Dec 2019 17:30:11 +0300 Message-Id: <20191230143028.27313-4-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ...to make RPS work correctly if user would like to configure it. Misc: fix identation of ar9331_netdev_ops structure. Signed-off-by: Alexander Lobakin --- net/dsa/tag_ar9331.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/net/dsa/tag_ar9331.c b/net/dsa/tag_ar9331.c index 466ffa92a474..399ca21ec03b 100644 --- a/net/dsa/tag_ar9331.c +++ b/net/dsa/tag_ar9331.c @@ -83,12 +83,20 @@ static struct sk_buff *ar9331_tag_rcv(struct sk_buff *skb, return skb; } +static void ar9331_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) +{ + *offset = AR9331_HDR_LEN; + *proto = *(__be16 *)skb->data; +} + static const struct dsa_device_ops ar9331_netdev_ops = { - .name = "ar9331", - .proto = DSA_TAG_PROTO_AR9331, - .xmit = ar9331_tag_xmit, - .rcv = ar9331_tag_rcv, - .overhead = AR9331_HDR_LEN, + .name = "ar9331", + .proto = DSA_TAG_PROTO_AR9331, + .xmit = ar9331_tag_xmit, + .rcv = ar9331_tag_rcv, + .flow_dissect = ar9331_tag_flow_dissect, + .overhead = AR9331_HDR_LEN, }; MODULE_LICENSE("GPL v2"); From patchwork Mon Dec 30 14:30:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216451 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="C4aV7rgf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfyd3wCDz9sR7 for ; Tue, 31 Dec 2019 01:32:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727614AbfL3OcG (ORCPT ); Mon, 30 Dec 2019 09:32:06 -0500 Received: from mail.dlink.ru ([178.170.168.18]:40340 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727397AbfL3OcG (ORCPT ); Mon, 30 Dec 2019 09:32:06 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 71A021B218C1; Mon, 30 Dec 2019 17:32:02 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 71A021B218C1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716322; bh=MElnUAXdbAsEzuA8MGuhZyEpxZHkJL0ydPnsBAYspiA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=C4aV7rgfFXr5QsMg7oqpLS4ALpkd9o2n+e/WwLsFyq73/uRzUH5oN5oyry0PGrlDQ 5Zx6RS3V9MpUS73C0zeclYiN/o3RhvPGKQX3T+FWn9sOq8ViuJnCXrLrhQ83+17YgG MeRsQUQW6Biic7lR4PuSbJsmHDF9k+iML/vxjoCQ= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 0C2421B207EB; Mon, 30 Dec 2019 17:31:11 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 0C2421B207EB Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id C6D2A1B229CB; Mon, 30 Dec 2019 17:31:08 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:08 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 04/19] net: dsa: tag_ar9331: split out common tag accessors Date: Mon, 30 Dec 2019 17:30:12 +0300 Message-Id: <20191230143028.27313-5-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org They will be reused in upcoming GRO callbacks. (Almost) no functional changes except less informative error string. Signed-off-by: Alexander Lobakin --- net/dsa/tag_ar9331.c | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/net/dsa/tag_ar9331.c b/net/dsa/tag_ar9331.c index 399ca21ec03b..c22c1b515e02 100644 --- a/net/dsa/tag_ar9331.c +++ b/net/dsa/tag_ar9331.c @@ -24,6 +24,25 @@ #define AR9331_HDR_RESERVED_MASK GENMASK(5, 4) #define AR9331_HDR_PORT_NUM_MASK GENMASK(3, 0) +static inline bool ar9331_tag_sanity_check(const u8 *data) +{ + u16 hdr = le16_to_cpup((__le16 *)(data - ETH_HLEN)); + + return FIELD_GET(AR9331_HDR_VERSION_MASK, hdr) == AR9331_HDR_VERSION && + !(hdr & AR9331_HDR_FROM_CPU); +} + +static inline int ar9331_tag_source_port(const u8 *data) +{ + /* hdr comes in LE byte order, so srcport field is in the first byte */ + return FIELD_GET(AR9331_HDR_PORT_NUM_MASK, *(data - ETH_HLEN)); +} + +static inline __be16 ar9331_tag_encap_proto(const u8 *data) +{ + return *(__be16 *)data; +} + static struct sk_buff *ar9331_tag_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -50,36 +69,27 @@ static struct sk_buff *ar9331_tag_rcv(struct sk_buff *skb, struct net_device *ndev, struct packet_type *pt) { - u8 ver, port; - u16 hdr; + int port; if (unlikely(!pskb_may_pull(skb, AR9331_HDR_LEN))) return NULL; - hdr = le16_to_cpu(*(__le16 *)skb_mac_header(skb)); - - ver = FIELD_GET(AR9331_HDR_VERSION_MASK, hdr); - if (unlikely(ver != AR9331_HDR_VERSION)) { - netdev_warn_once(ndev, "%s:%i wrong header version 0x%2x\n", - __func__, __LINE__, hdr); - return NULL; - } - - if (unlikely(hdr & AR9331_HDR_FROM_CPU)) { - netdev_warn_once(ndev, "%s:%i packet should not be from cpu 0x%2x\n", - __func__, __LINE__, hdr); + if (unlikely(!ar9331_tag_sanity_check(skb->data))) { + netdev_warn_once(ndev, + "%s:%i wrong header version or source port\n", + __func__, __LINE__); return NULL; } - skb_pull_rcsum(skb, AR9331_HDR_LEN); - /* Get source port information */ - port = FIELD_GET(AR9331_HDR_PORT_NUM_MASK, hdr); + port = ar9331_tag_source_port(skb->data); skb->dev = dsa_master_find_slave(ndev, 0, port); if (!skb->dev) return NULL; + skb_pull_rcsum(skb, AR9331_HDR_LEN); + return skb; } @@ -87,7 +97,7 @@ static void ar9331_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, int *offset) { *offset = AR9331_HDR_LEN; - *proto = *(__be16 *)skb->data; + *proto = ar9331_tag_encap_proto(skb->data); } static const struct dsa_device_ops ar9331_netdev_ops = { From patchwork Mon Dec 30 14:30:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216458 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="jA3gEr2v"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzS10k3z9sRC for ; Tue, 31 Dec 2019 01:32:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727741AbfL3Ocn (ORCPT ); Mon, 30 Dec 2019 09:32:43 -0500 Received: from fd.dlink.ru ([178.170.168.18]:41168 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727521AbfL3Ocd (ORCPT ); Mon, 30 Dec 2019 09:32:33 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id C21351B20B5F; Mon, 30 Dec 2019 17:32:30 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru C21351B20B5F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716350; bh=n2vYVzB39mJzBIUNOizuSzaLB2BB0ciDP2ax+76PUW4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=jA3gEr2vjc7p0oigjAAeDuVdtxeVxX75vrLu9Dada3K7I9vZfK6wf5pvxKMFf7HHR p3LFKgwXFlB+NnQz6phxK63YzEi5lO27AjBSnemdxjkj3ljxGzxuHMuRiYK1xxMq4C eo60/8UgEF8Nim2FOCxr8mbg+QzyAY/1OdZS5o8Q= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 113301B20B5F; Mon, 30 Dec 2019 17:31:13 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 113301B20B5F Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id E5D7D1B229D0; Mon, 30 Dec 2019 17:31:10 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:10 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 05/19] net: dsa: tag_ar9331: add GRO callbacks Date: Mon, 30 Dec 2019 17:30:13 +0300 Message-Id: <20191230143028.27313-6-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add GRO callbacks to the AR9331 tagger so GRO layer can now process such frames. Signed-off-by: Alexander Lobakin --- net/dsa/tag_ar9331.c | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/net/dsa/tag_ar9331.c b/net/dsa/tag_ar9331.c index c22c1b515e02..99cc7fd92d8e 100644 --- a/net/dsa/tag_ar9331.c +++ b/net/dsa/tag_ar9331.c @@ -100,12 +100,89 @@ static void ar9331_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, *proto = ar9331_tag_encap_proto(skb->data); } +static struct sk_buff *ar9331_tag_gro_receive(struct list_head *head, + struct sk_buff *skb) +{ + const struct packet_offload *ptype; + struct sk_buff *p, *pp = NULL; + u32 data_off, data_end; + const u8 *data; + int flush = 1; + + data_off = skb_gro_offset(skb); + data_end = data_off + AR9331_HDR_LEN; + + data = skb_gro_header_fast(skb, data_off); + if (skb_gro_header_hard(skb, data_end)) { + data = skb_gro_header_slow(skb, data_end, data_off); + if (unlikely(!data)) + goto out; + } + + /* Data that is to the left from the current position is already + * pulled to the head + */ + if (unlikely(!ar9331_tag_sanity_check(skb->data + data_off))) + goto out; + + rcu_read_lock(); + + ptype = gro_find_receive_by_type(ar9331_tag_encap_proto(data)); + if (!ptype) + goto out_unlock; + + flush = 0; + + list_for_each_entry(p, head, list) { + if (!NAPI_GRO_CB(p)->same_flow) + continue; + + if (ar9331_tag_source_port(skb->data + data_off) ^ + ar9331_tag_source_port(p->data + data_off)) + NAPI_GRO_CB(p)->same_flow = 0; + } + + skb_gro_pull(skb, AR9331_HDR_LEN); + skb_gro_postpull_rcsum(skb, data, AR9331_HDR_LEN); + + pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); + +out_unlock: + rcu_read_unlock(); +out: + skb_gro_flush_final(skb, pp, flush); + + return pp; +} + +static int ar9331_tag_gro_complete(struct sk_buff *skb, int nhoff) +{ + const struct packet_offload *ptype; + int err = -ENOENT; + __be16 proto; + + proto = ar9331_tag_encap_proto(skb->data + nhoff); + nhoff += AR9331_HDR_LEN; + + rcu_read_lock(); + + ptype = gro_find_complete_by_type(proto); + if (ptype) + err = ptype->callbacks.gro_complete(skb, nhoff); + + rcu_read_unlock(); + + return err; +} + static const struct dsa_device_ops ar9331_netdev_ops = { .name = "ar9331", .proto = DSA_TAG_PROTO_AR9331, .xmit = ar9331_tag_xmit, .rcv = ar9331_tag_rcv, .flow_dissect = ar9331_tag_flow_dissect, + .gro_receive = ar9331_tag_gro_receive, + .gro_complete = ar9331_tag_gro_complete, .overhead = AR9331_HDR_LEN, }; From patchwork Mon Dec 30 14:30:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216455 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="WgsGWKE1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzB5ZnQz9sR7 for ; Tue, 31 Dec 2019 01:32:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727661AbfL3Oce (ORCPT ); Mon, 30 Dec 2019 09:32:34 -0500 Received: from fd.dlink.ru ([178.170.168.18]:41126 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727703AbfL3Ocb (ORCPT ); Mon, 30 Dec 2019 09:32:31 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 05EB11B21941; Mon, 30 Dec 2019 17:32:28 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 05EB11B21941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716349; bh=7OSwCRil5bvUGDc9SU5jjL6pENQDuKNpW1Evf4I2LJc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WgsGWKE1FopPv6JqeCKM4JUz3cny8cfdZsDoWjlAyoXTeen9xXtdpOFQd2dosrWev Qoo8rqVzNrcOjZu3ZekSV87RxDW1DRbcANXzEF+N0fQP5OJT47sXGZSkSzqTMeJRxr vJtjBVaMeZL5tOktab75taS9+zEYXUyYINYVq0jo= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id CE9171B2085D; Mon, 30 Dec 2019 17:31:14 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru CE9171B2085D Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 02BE81B229D1; Mon, 30 Dec 2019 17:31:13 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:12 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 06/19] net: dsa: tag_gswip: fix typo in tag name Date: Mon, 30 Dec 2019 17:30:14 +0300 Message-Id: <20191230143028.27313-7-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org "gwsip" -> "gswip". Signed-off-by: Alexander Lobakin Reviewed-by: Andrew Lunn --- net/dsa/tag_gswip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/dsa/tag_gswip.c b/net/dsa/tag_gswip.c index b678160bbd66..408d4af390a0 100644 --- a/net/dsa/tag_gswip.c +++ b/net/dsa/tag_gswip.c @@ -104,7 +104,7 @@ static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb, } static const struct dsa_device_ops gswip_netdev_ops = { - .name = "gwsip", + .name = "gswip", .proto = DSA_TAG_PROTO_GSWIP, .xmit = gswip_tag_xmit, .rcv = gswip_tag_rcv, From patchwork Mon Dec 30 14:30:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216461 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="HHvUKrU9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzz0z9qz9sRH for ; Tue, 31 Dec 2019 01:33:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727803AbfL3OdK (ORCPT ); Mon, 30 Dec 2019 09:33:10 -0500 Received: from mail.dlink.ru ([178.170.168.18]:41872 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727784AbfL3OdK (ORCPT ); Mon, 30 Dec 2019 09:33:10 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 36C071B2196B; Mon, 30 Dec 2019 17:33:04 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 36C071B2196B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716387; bh=oevogiD6ZZjPjhds8OttybiSWL3W+YH+lNJv5xktFv4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HHvUKrU9njVz7eRTFBtWVcJqgiN98W16NbF+L4eCilFnxxjJS9ZFwyEldY9xsL7kO /rVUwlNrY7C6XSNZtZvUNFGbDDzyy144NEFHCQInQhc6scjh5kIrxhEIlHAoknozuU 07FCzo+AMG+P8XnzVcaQbIhY3ToLZdSJT4uVPsus= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 0E58B1B2176F; Mon, 30 Dec 2019 17:31:17 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 0E58B1B2176F Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id D02B21B229CB; Mon, 30 Dec 2019 17:31:14 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:14 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 07/19] net: dsa: tag_gswip: switch to bitfield helpers Date: Mon, 30 Dec 2019 17:30:15 +0300 Message-Id: <20191230143028.27313-8-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make code look cleaner and more readable by using bitfield macros instead of open-coding masks and shifts. Misc: remove redundant variable in gswip_tag_xmit(), make dsa_port const. Signed-off-by: Alexander Lobakin --- net/dsa/tag_gswip.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/net/dsa/tag_gswip.c b/net/dsa/tag_gswip.c index 408d4af390a0..de920f6aac5b 100644 --- a/net/dsa/tag_gswip.c +++ b/net/dsa/tag_gswip.c @@ -5,6 +5,7 @@ * Copyright (C) 2017 - 2018 Hauke Mehrtens */ +#include #include #include #include @@ -45,26 +46,22 @@ #define GSWIP_TX_CLASS_MASK GENMASK(3, 0) /* Byte 3 */ +#define GSWIP_TX_PORT_MAP(port) FIELD_PREP(GENMASK(6, 1), BIT(port)) #define GSWIP_TX_DPID_EN BIT(0) -#define GSWIP_TX_PORT_MAP_SHIFT 1 -#define GSWIP_TX_PORT_MAP_MASK GENMASK(6, 1) -#define GSWIP_RX_HEADER_LEN 8 +#define GSWIP_RX_HEADER_LEN 8 /* special tag in RX path header */ /* Byte 7 */ -#define GSWIP_RX_SPPID_SHIFT 4 -#define GSWIP_RX_SPPID_MASK GENMASK(6, 4) +#define GSWIP_RX_SPPID(byte_7) FIELD_GET(GENMASK(6, 4), byte_7) static struct sk_buff *gswip_tag_xmit(struct sk_buff *skb, struct net_device *dev) { - struct dsa_port *dp = dsa_slave_to_port(dev); - int err; + const struct dsa_port *dp = dsa_slave_to_port(dev); u8 *gswip_tag; - err = skb_cow_head(skb, GSWIP_TX_HEADER_LEN); - if (err) + if (skb_cow_head(skb, GSWIP_TX_HEADER_LEN)) return NULL; skb_push(skb, GSWIP_TX_HEADER_LEN); @@ -73,8 +70,7 @@ static struct sk_buff *gswip_tag_xmit(struct sk_buff *skb, gswip_tag[0] = GSWIP_TX_SLPID_CPU; gswip_tag[1] = GSWIP_TX_DPID_ELAN; gswip_tag[2] = GSWIP_TX_PORT_MAP_EN | GSWIP_TX_PORT_MAP_SEL; - gswip_tag[3] = BIT(dp->index + GSWIP_TX_PORT_MAP_SHIFT) & GSWIP_TX_PORT_MAP_MASK; - gswip_tag[3] |= GSWIP_TX_DPID_EN; + gswip_tag[3] = GSWIP_TX_PORT_MAP(dp->index) | GSWIP_TX_DPID_EN; return skb; } @@ -84,15 +80,13 @@ static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb, struct packet_type *pt) { int port; - u8 *gswip_tag; if (unlikely(!pskb_may_pull(skb, GSWIP_RX_HEADER_LEN))) return NULL; - gswip_tag = skb->data - ETH_HLEN; - /* Get source port information */ - port = (gswip_tag[7] & GSWIP_RX_SPPID_MASK) >> GSWIP_RX_SPPID_SHIFT; + port = GSWIP_RX_SPPID(*(skb->data - ETH_HLEN + 7)); + skb->dev = dsa_master_find_slave(dev, 0, port); if (!skb->dev) return NULL; From patchwork Mon Dec 30 14:30:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216462 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="q7IfbC9g"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mg021PvTz9sRH for ; Tue, 31 Dec 2019 01:33:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727779AbfL3OdI (ORCPT ); Mon, 30 Dec 2019 09:33:08 -0500 Received: from mail.dlink.ru ([178.170.168.18]:41842 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727543AbfL3OdH (ORCPT ); Mon, 30 Dec 2019 09:33:07 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 55A1E1B2176F; Mon, 30 Dec 2019 17:33:03 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 55A1E1B2176F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716385; bh=NXl5VU/NmF4XHV2zVViXhu4aInL/BB6UJlu0+qQYx4Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=q7IfbC9g1WsWcW3ct9wr1eTtowNwVWxCnUosrdhrbuK7bQeAYIVEJiScpiechbmcw UAJ2liXVJUMxB7sgm+B2GhN/wHMhI8RrIuveFE87p4Pj9siYz90QIC1thEsZeenG6u 9zljbPGtqHgTtNeyFCrTOkqwT8QADsHn+fQCgr0E= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 1C4DF1B217AA; Mon, 30 Dec 2019 17:31:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 1C4DF1B217AA Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id DF39D1B229D0; Mon, 30 Dec 2019 17:31:16 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:16 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 08/19] net: dsa: tag_gswip: add .flow_dissect() callback Date: Mon, 30 Dec 2019 17:30:16 +0300 Message-Id: <20191230143028.27313-9-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In case user would like to configure RPS on such systems. Misc: fix identation of gswip_netdev_ops structure. Signed-off-by: Alexander Lobakin --- net/dsa/tag_gswip.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/net/dsa/tag_gswip.c b/net/dsa/tag_gswip.c index de920f6aac5b..d37289540ef3 100644 --- a/net/dsa/tag_gswip.c +++ b/net/dsa/tag_gswip.c @@ -97,12 +97,20 @@ static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb, return skb; } +static void gswip_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) +{ + *offset = GSWIP_RX_HEADER_LEN; + *proto = *(__be16 *)(skb->data + 6); +} + static const struct dsa_device_ops gswip_netdev_ops = { - .name = "gswip", - .proto = DSA_TAG_PROTO_GSWIP, - .xmit = gswip_tag_xmit, - .rcv = gswip_tag_rcv, - .overhead = GSWIP_RX_HEADER_LEN, + .name = "gswip", + .proto = DSA_TAG_PROTO_GSWIP, + .xmit = gswip_tag_xmit, + .rcv = gswip_tag_rcv, + .flow_dissect = gswip_tag_flow_dissect, + .overhead = GSWIP_RX_HEADER_LEN, }; MODULE_LICENSE("GPL"); From patchwork Mon Dec 30 14:30:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216464 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="W9DiqZJ5"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mg0H5rFBz9sRC for ; Tue, 31 Dec 2019 01:33:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727842AbfL3Odc (ORCPT ); Mon, 30 Dec 2019 09:33:32 -0500 Received: from mail.dlink.ru ([178.170.168.18]:42232 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727576AbfL3Oda (ORCPT ); Mon, 30 Dec 2019 09:33:30 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 05BD91B20B7B; Mon, 30 Dec 2019 17:33:26 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 05BD91B20B7B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716407; bh=Erjvba4dIKrPISREjV3SM+2wcBTCz6oIK+5iwW6Xun4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=W9DiqZJ515jMwhKOig4girjPYcE4uMTlFxCaeERSRbste6vzrQDxtUSlDa8PpmCBh clMjplrv8rpBd4MatbcgS7tVbCQ5seWlVj+vfyXWG/PTL+efemYwc2uau4PMh+OSfp Oeu6BJjraKKEtpwG5m+q97Nr9IwiwbgYACDxQFP8= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 6FBF51B2180E; Mon, 30 Dec 2019 17:31:21 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 6FBF51B2180E Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 266F41B229D1; Mon, 30 Dec 2019 17:31:19 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:19 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 09/19] net: dsa: tag_gswip: split out common tag accessors Date: Mon, 30 Dec 2019 17:30:17 +0300 Message-Id: <20191230143028.27313-10-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ...to reuse them in GRO callbacks. Signed-off-by: Alexander Lobakin --- net/dsa/tag_gswip.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/net/dsa/tag_gswip.c b/net/dsa/tag_gswip.c index d37289540ef3..e7b36de27fd8 100644 --- a/net/dsa/tag_gswip.c +++ b/net/dsa/tag_gswip.c @@ -55,6 +55,16 @@ /* Byte 7 */ #define GSWIP_RX_SPPID(byte_7) FIELD_GET(GENMASK(6, 4), byte_7) +static inline int gswip_tag_source_port(const u8 *data) +{ + return GSWIP_RX_SPPID(*(data - ETH_HLEN + 7)); +} + +static inline __be16 gswip_tag_encap_proto(const u8 *data) +{ + return *(__be16 *)(data + 6); +} + static struct sk_buff *gswip_tag_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -85,7 +95,7 @@ static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb, return NULL; /* Get source port information */ - port = GSWIP_RX_SPPID(*(skb->data - ETH_HLEN + 7)); + port = gswip_tag_source_port(skb->data); skb->dev = dsa_master_find_slave(dev, 0, port); if (!skb->dev) @@ -101,7 +111,7 @@ static void gswip_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, int *offset) { *offset = GSWIP_RX_HEADER_LEN; - *proto = *(__be16 *)(skb->data + 6); + *proto = gswip_tag_encap_proto(skb->data); } static const struct dsa_device_ops gswip_netdev_ops = { From patchwork Mon Dec 30 14:30:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216465 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="HmP4J2AX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mg0K6XW0z9sRC for ; Tue, 31 Dec 2019 01:33:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727828AbfL3Oda (ORCPT ); Mon, 30 Dec 2019 09:33:30 -0500 Received: from mail.dlink.ru ([178.170.168.18]:42220 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727532AbfL3Od3 (ORCPT ); Mon, 30 Dec 2019 09:33:29 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id A2EC81B219A8; Mon, 30 Dec 2019 17:33:26 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru A2EC81B219A8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716406; bh=q7IufE7HIiHvycVJgjMYvuW6fyhlbqwjI/W5rJkX8G8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HmP4J2AXWwflkQBqL9lkLwAxd51UAeaYBqYNSxsH051hQOWJcgVqveKItTvnJ3oaq 2N1ctDN2jvAtQlLnRJKjcuI+KrO9KR0504lC2IJa9dLO8EoP/JF3WpCqFswJgOI58x Cw5umkRIQ5F2hCYLJkKfdiWdatn2cadohbeXCe4Y= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 5AEF91B20B7B; Mon, 30 Dec 2019 17:31:23 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 5AEF91B20B7B Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 3BD431B229CB; Mon, 30 Dec 2019 17:31:21 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:21 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 10/19] net: dsa: tag_gswip: add GRO callbacks Date: Mon, 30 Dec 2019 17:30:18 +0300 Message-Id: <20191230143028.27313-11-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ...so that GRO layer can now correctly process GSWIP-tagged frames. Signed-off-by: Alexander Lobakin --- net/dsa/tag_gswip.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/net/dsa/tag_gswip.c b/net/dsa/tag_gswip.c index e7b36de27fd8..56e754bd434a 100644 --- a/net/dsa/tag_gswip.c +++ b/net/dsa/tag_gswip.c @@ -114,12 +114,86 @@ static void gswip_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, *proto = gswip_tag_encap_proto(skb->data); } +static struct sk_buff *gswip_tag_gro_receive(struct list_head *head, + struct sk_buff *skb) +{ + const struct packet_offload *ptype; + struct sk_buff *p, *pp = NULL; + u32 data_off, data_end; + const u8 *data; + int flush = 1; + + data_off = skb_gro_offset(skb); + data_end = data_off + GSWIP_RX_HEADER_LEN; + + data = skb_gro_header_fast(skb, data_off); + if (skb_gro_header_hard(skb, data_end)) { + data = skb_gro_header_slow(skb, data_end, data_off); + if (unlikely(!data)) + goto out; + } + + rcu_read_lock(); + + ptype = gro_find_receive_by_type(gswip_tag_encap_proto(data)); + if (!ptype) + goto out_unlock; + + flush = 0; + + list_for_each_entry(p, head, list) { + if (!NAPI_GRO_CB(p)->same_flow) + continue; + + /* Data that is to the left to the current position is already + * pulled to the head + */ + if (gswip_tag_source_port(skb->data + data_off) ^ + gswip_tag_source_port(p->data + data_off)) + NAPI_GRO_CB(p)->same_flow = 0; + } + + skb_gro_pull(skb, GSWIP_RX_HEADER_LEN); + skb_gro_postpull_rcsum(skb, data, GSWIP_RX_HEADER_LEN); + + pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); + +out_unlock: + rcu_read_unlock(); +out: + skb_gro_flush_final(skb, pp, flush); + + return pp; +} + +static int gswip_tag_gro_complete(struct sk_buff *skb, int nhoff) +{ + const struct packet_offload *ptype; + int err = -ENOENT; + __be16 proto; + + proto = gswip_tag_encap_proto(skb->data + nhoff); + nhoff += GSWIP_RX_HEADER_LEN; + + rcu_read_lock(); + + ptype = gro_find_complete_by_type(proto); + if (ptype) + err = ptype->callbacks.gro_complete(skb, nhoff); + + rcu_read_unlock(); + + return err; +} + static const struct dsa_device_ops gswip_netdev_ops = { .name = "gswip", .proto = DSA_TAG_PROTO_GSWIP, .xmit = gswip_tag_xmit, .rcv = gswip_tag_rcv, .flow_dissect = gswip_tag_flow_dissect, + .gro_receive = gswip_tag_gro_receive, + .gro_complete = gswip_tag_gro_complete, .overhead = GSWIP_RX_HEADER_LEN, }; From patchwork Mon Dec 30 14:30:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216459 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="EA1crrXz"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzX4V9Bz9sRC for ; Tue, 31 Dec 2019 01:32:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727639AbfL3OcR (ORCPT ); Mon, 30 Dec 2019 09:32:17 -0500 Received: from fd.dlink.ru ([178.170.168.18]:40704 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727624AbfL3OcQ (ORCPT ); Mon, 30 Dec 2019 09:32:16 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 3FF421B21941; Mon, 30 Dec 2019 17:32:13 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 3FF421B21941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716334; bh=YK6u2SeWu80P0OI5Ey+MvrHZ5A/LDUTcrFuPYPEXrWc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=EA1crrXz1GwC40iHZFRzzrND2voKAaX5s5KNo+7EyC2gZUcG2Nrjc4J5R+YsyRh06 3M7soGsBe8fekotFvSmHiI68RHQYOvGtoowoMl69q5Lhna24DPRstIeT68HlIUPMSq 80rUdu6Z0FPseMgsyeha9yefLk78RcRjbsZhBi5c= Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 5C4301B2181E; Mon, 30 Dec 2019 17:31:25 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 5C4301B2181E Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 5FCF01B229D0; Mon, 30 Dec 2019 17:31:23 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:23 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 11/19] net: dsa: tag_lan9303: add .flow_dissect() callback Date: Mon, 30 Dec 2019 17:30:19 +0300 Message-Id: <20191230143028.27313-12-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This fixes Rx packet hashing on RPS-enabled systems. Misc: fix lan9303_netdev_ops identation. Signed-off-by: Alexander Lobakin --- net/dsa/tag_lan9303.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/net/dsa/tag_lan9303.c b/net/dsa/tag_lan9303.c index eb0e7a32e53d..d328a44381a9 100644 --- a/net/dsa/tag_lan9303.c +++ b/net/dsa/tag_lan9303.c @@ -128,12 +128,20 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev, return skb; } +static void lan9303_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) +{ + *offset = LAN9303_TAG_LEN; + *proto = *(__be16 *)(skb->data + 2); +} + static const struct dsa_device_ops lan9303_netdev_ops = { - .name = "lan9303", - .proto = DSA_TAG_PROTO_LAN9303, - .xmit = lan9303_xmit, - .rcv = lan9303_rcv, - .overhead = LAN9303_TAG_LEN, + .name = "lan9303", + .proto = DSA_TAG_PROTO_LAN9303, + .xmit = lan9303_xmit, + .rcv = lan9303_rcv, + .flow_dissect = lan9303_flow_dissect, + .overhead = LAN9303_TAG_LEN, }; MODULE_LICENSE("GPL"); From patchwork Mon Dec 30 14:30:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216454 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="qJIC8vez"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfz36rzhz9sPc for ; Tue, 31 Dec 2019 01:32:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727657AbfL3OcS (ORCPT ); Mon, 30 Dec 2019 09:32:18 -0500 Received: from mail.dlink.ru ([178.170.168.18]:40682 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727397AbfL3OcR (ORCPT ); Mon, 30 Dec 2019 09:32:17 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id D3AEB1B21931; Mon, 30 Dec 2019 17:32:13 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru D3AEB1B21931 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716333; bh=K9IglDMfo6fAz8oDQ8Cy06HvYvmttudvu1VgNCQnFXk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=qJIC8vezW0CT/vTGRMA6+/uDOBnYmq5DvI2uzElLicNNnROsynCLwKx6/5v0TwV2K Evrqb7oMuu61H5mj88wT1Dq6dGlhCouT1Po/aapUQkzrZy3nK6zMZ3u/By/+xLyjth IeKgMTm5eYOelpTgn83ZgI1+QLjvJH7RgTn84Ug4= Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 615FD1B21809; Mon, 30 Dec 2019 17:31:27 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 615FD1B21809 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 5C76B1B229CB; Mon, 30 Dec 2019 17:31:25 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:25 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 12/19] net: dsa: tag_lan9303: split out common tag accessors Date: Mon, 30 Dec 2019 17:30:20 +0300 Message-Id: <20191230143028.27313-13-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ...as they will be needed in the upcoming GRO callbacks. Signed-off-by: Alexander Lobakin --- net/dsa/tag_lan9303.c | 46 +++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/net/dsa/tag_lan9303.c b/net/dsa/tag_lan9303.c index d328a44381a9..ba03502986a4 100644 --- a/net/dsa/tag_lan9303.c +++ b/net/dsa/tag_lan9303.c @@ -38,6 +38,32 @@ # define LAN9303_TAG_RX_TRAPPED_TO_CPU (LAN9303_TAG_RX_IGMP | \ LAN9303_TAG_RX_STP) +static inline bool lan9303_sanity_check(const u8 *data) +{ + /* '->data' points into the middle of our special VLAN tag information: + * + * ~ MAC src | 0x81 | 0x00 | 0xyy | 0xzz | ether type + * ^ + * ->data + */ + return *(__be16 *)(data - 2) == htons(ETH_P_8021Q); +} + +static inline bool lan9303_trapped_to_cpu(const u8 *data) +{ + return *(data + 1) & LAN9303_TAG_RX_TRAPPED_TO_CPU; +} + +static inline int lan9303_source_port(const u8 *data) +{ + return *(data + 1) & GENMASK(1, 0); +} + +static inline __be16 lan9303_encap_proto(const u8 *data) +{ + return *(__be16 *)(data + 2); +} + /* Decide whether to transmit using ALR lookup, or transmit directly to * port using tag. ALR learning is performed only when using ALR lookup. * If the two external ports are bridged and the frame is unicast, @@ -85,8 +111,6 @@ static struct sk_buff *lan9303_xmit(struct sk_buff *skb, struct net_device *dev) static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { - u16 *lan9303_tag; - u16 lan9303_tag1; unsigned int source_port; if (unlikely(!pskb_may_pull(skb, LAN9303_TAG_LEN))) { @@ -95,21 +119,12 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev, return NULL; } - /* '->data' points into the middle of our special VLAN tag information: - * - * ~ MAC src | 0x81 | 0x00 | 0xyy | 0xzz | ether type - * ^ - * ->data - */ - lan9303_tag = (u16 *)(skb->data - 2); - - if (lan9303_tag[0] != htons(ETH_P_8021Q)) { + if (!lan9303_sanity_check(skb->data)) { dev_warn_ratelimited(&dev->dev, "Dropping packet due to invalid VLAN marker\n"); return NULL; } - lan9303_tag1 = ntohs(lan9303_tag[1]); - source_port = lan9303_tag1 & 0x3; + source_port = lan9303_source_port(skb->data); skb->dev = dsa_master_find_slave(dev, 0, source_port); if (!skb->dev) { @@ -117,13 +132,14 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev, return NULL; } + skb->offload_fwd_mark = !lan9303_trapped_to_cpu(skb->data); + /* remove the special VLAN tag between the MAC addresses * and the current ethertype field. */ skb_pull_rcsum(skb, 2 + 2); memmove(skb->data - ETH_HLEN, skb->data - (ETH_HLEN + LAN9303_TAG_LEN), 2 * ETH_ALEN); - skb->offload_fwd_mark = !(lan9303_tag1 & LAN9303_TAG_RX_TRAPPED_TO_CPU); return skb; } @@ -132,7 +148,7 @@ static void lan9303_flow_dissect(const struct sk_buff *skb, __be16 *proto, int *offset) { *offset = LAN9303_TAG_LEN; - *proto = *(__be16 *)(skb->data + 2); + *proto = lan9303_encap_proto(skb->data); } static const struct dsa_device_ops lan9303_netdev_ops = { From patchwork Mon Dec 30 14:30:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216452 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="HjAWVF7f"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfyw1YN5z9sRC for ; Tue, 31 Dec 2019 01:32:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727691AbfL3OcW (ORCPT ); Mon, 30 Dec 2019 09:32:22 -0500 Received: from mail.dlink.ru ([178.170.168.18]:40796 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727661AbfL3OcU (ORCPT ); Mon, 30 Dec 2019 09:32:20 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 78B151B21990; Mon, 30 Dec 2019 17:32:17 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 78B151B21990 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716337; bh=SYnifMPQP4kzdSLpDkUORDps+aCxCuIpXYmwM1fEL9I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HjAWVF7fJOydlUu7w4y+Nj7t3lh9CsZSwnpvNJrr9JZgyGQ2iKuBzLZB12ahEdSI/ kFoLJ6RIJtMyn8A9Yo6Q7CH8w24P1jKYfI711/d6vpyLzP6CkHYgKPE9nTxPytuePA c2xf96yt8jcMptCMC806qRahzuNRJpLHM9L+G27I= Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 3C8BB1B21825; Mon, 30 Dec 2019 17:31:29 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 3C8BB1B21825 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 678DC1B229D0; Mon, 30 Dec 2019 17:31:27 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:27 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 13/19] net: dsa: tag_lan9303: add GRO callbacks Date: Mon, 30 Dec 2019 17:30:21 +0300 Message-Id: <20191230143028.27313-14-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add GRO callbacks for LAN9303 tagger to make GRO available for frames tagged with it. Signed-off-by: Alexander Lobakin --- net/dsa/tag_lan9303.c | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/net/dsa/tag_lan9303.c b/net/dsa/tag_lan9303.c index ba03502986a4..77aba4311f2d 100644 --- a/net/dsa/tag_lan9303.c +++ b/net/dsa/tag_lan9303.c @@ -151,12 +151,89 @@ static void lan9303_flow_dissect(const struct sk_buff *skb, __be16 *proto, *proto = lan9303_encap_proto(skb->data); } +static struct sk_buff *lan9303_gro_receive(struct list_head *head, + struct sk_buff *skb) +{ + const struct packet_offload *ptype; + struct sk_buff *p, *pp = NULL; + const u8 *data, *data_p; + u32 data_off, data_end; + int flush = 1; + + data_off = skb_gro_offset(skb); + data_end = data_off + LAN9303_TAG_LEN; + + data = skb_gro_header_fast(skb, data_off); + if (skb_gro_header_hard(skb, data_end)) { + data = skb_gro_header_slow(skb, data_end, data_off); + if (unlikely(!data)) + goto out; + } + + /* Data that is to the left to the current position is already + * pulled to the head + */ + if (!lan9303_sanity_check(skb->data + data_off)) + goto out; + + rcu_read_lock(); + + ptype = gro_find_receive_by_type(lan9303_encap_proto(data)); + if (!ptype) + goto out_unlock; + + flush = 0; + + list_for_each_entry(p, head, list) { + if (!NAPI_GRO_CB(p)->same_flow) + continue; + + data_p = p->data + data_off; + if (lan9303_source_port(data) ^ lan9303_source_port(data_p)) + NAPI_GRO_CB(p)->same_flow = 0; + } + + skb_gro_pull(skb, LAN9303_TAG_LEN); + skb_gro_postpull_rcsum(skb, data, LAN9303_TAG_LEN); + + pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); + +out_unlock: + rcu_read_unlock(); +out: + skb_gro_flush_final(skb, pp, flush); + + return pp; +} + +static int lan9303_gro_complete(struct sk_buff *skb, int nhoff) +{ + const struct packet_offload *ptype; + int err = -ENOENT; + __be16 proto; + + proto = lan9303_encap_proto(skb->data + nhoff); + nhoff += LAN9303_TAG_LEN; + + rcu_read_lock(); + + ptype = gro_find_complete_by_type(proto); + if (ptype) + err = ptype->callbacks.gro_complete(skb, nhoff); + + rcu_read_unlock(); + + return err; +} + static const struct dsa_device_ops lan9303_netdev_ops = { .name = "lan9303", .proto = DSA_TAG_PROTO_LAN9303, .xmit = lan9303_xmit, .rcv = lan9303_rcv, .flow_dissect = lan9303_flow_dissect, + .gro_receive = lan9303_gro_receive, + .gro_complete = lan9303_gro_complete, .overhead = LAN9303_TAG_LEN, }; From patchwork Mon Dec 30 14:30:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216453 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="b88+1mXk"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfz15kCsz9sPc for ; Tue, 31 Dec 2019 01:32:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727677AbfL3OcV (ORCPT ); Mon, 30 Dec 2019 09:32:21 -0500 Received: from mail.dlink.ru ([178.170.168.18]:40748 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727626AbfL3OcS (ORCPT ); Mon, 30 Dec 2019 09:32:18 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id D42DD1B2194E; Mon, 30 Dec 2019 17:32:15 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru D42DD1B2194E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716335; bh=omc8QrcNvP8pME1zDqBdaSM8dT/TdIR/78ZE/IJu6BE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=b88+1mXk3AaqAKo5cHXojM8Z9FBeCQYwTsQ12ohRqbDqgjeny47cYSKO8Yr+cYZJV NjbHt8cg+BFN05lMnlGwswFArEKZd6MFsnMm10h8/V2iRbBoqq6kVElCR/hZWwTaP3 NvQK8y1+7ajTw3719vsL7KFvMswIHA1393Qr+sUk= Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 041281B21829; Mon, 30 Dec 2019 17:31:31 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 041281B21829 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 3A52F1B229CB; Mon, 30 Dec 2019 17:31:29 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:29 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 14/19] net: dsa: tag_mtk: split out common tag accessors Date: Mon, 30 Dec 2019 17:30:22 +0300 Message-Id: <20191230143028.27313-15-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Misc: fix identation of MTK_HDR_LEN and make use of it in mtk_tag_flow_dissect() instead of open-coded value. Signed-off-by: Alexander Lobakin --- net/dsa/tag_mtk.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c index c3ad7b7b142a..b926ffdf5fb5 100644 --- a/net/dsa/tag_mtk.c +++ b/net/dsa/tag_mtk.c @@ -10,12 +10,27 @@ #include "dsa_priv.h" -#define MTK_HDR_LEN 4 +#define MTK_HDR_LEN 4 #define MTK_HDR_XMIT_UNTAGGED 0 #define MTK_HDR_XMIT_TAGGED_TPID_8100 1 #define MTK_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0) #define MTK_HDR_XMIT_DP_BIT_MASK GENMASK(5, 0) +static inline int mtk_tag_source_port(const u8 *data) +{ + /* The MTK header is added by the switch between src addr + * and ethertype at this point, skb->data points to 2 bytes + * after src addr so header should be 2 bytes right before. + * The source port field is in the second byte of the tag. + */ + return *(data - 1) & MTK_HDR_RECV_SOURCE_PORT_MASK; +} + +static inline __be16 mtk_tag_encap_proto(const u8 *data) +{ + return *(__be16 *)(data + 2); +} + static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -60,17 +75,15 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { int port; - __be16 *phdr, hdr; if (unlikely(!pskb_may_pull(skb, MTK_HDR_LEN))) return NULL; - /* The MTK header is added by the switch between src addr - * and ethertype at this point, skb->data points to 2 bytes - * after src addr so header should be 2 bytes right before. - */ - phdr = (__be16 *)(skb->data - 2); - hdr = ntohs(*phdr); + port = mtk_tag_source_port(skb->data); + + skb->dev = dsa_master_find_slave(dev, 0, port); + if (!skb->dev) + return NULL; /* Remove MTK tag and recalculate checksum. */ skb_pull_rcsum(skb, MTK_HDR_LEN); @@ -79,21 +92,14 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev, skb->data - ETH_HLEN - MTK_HDR_LEN, 2 * ETH_ALEN); - /* Get source port information */ - port = (hdr & MTK_HDR_RECV_SOURCE_PORT_MASK); - - skb->dev = dsa_master_find_slave(dev, 0, port); - if (!skb->dev) - return NULL; - return skb; } static void mtk_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, int *offset) { - *offset = 4; - *proto = ((__be16 *)skb->data)[1]; + *offset = MTK_HDR_LEN; + *proto = mtk_tag_encap_proto(skb->data); } static const struct dsa_device_ops mtk_netdev_ops = { From patchwork Mon Dec 30 14:30:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216456 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="etkoAoeM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzF3zqGz9sR7 for ; Tue, 31 Dec 2019 01:32:41 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727717AbfL3Ocd (ORCPT ); Mon, 30 Dec 2019 09:32:33 -0500 Received: from mail.dlink.ru ([178.170.168.18]:41112 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727661AbfL3Ocb (ORCPT ); Mon, 30 Dec 2019 09:32:31 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 41E721B218C1; Mon, 30 Dec 2019 17:32:28 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 41E721B218C1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716348; bh=5GU07UvxnF6CEe2vyJnNhi1kO3JmRqioFhLZDpggQ5k=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=etkoAoeMZ4QFCwTkPyD0z0/BrASt2vw7HAbAVntgFLdRjv061NGWcmjGTKpD0eq1f K6mOeBdTzWZ/gfldnq6Lk95zKUwbzpzp1Y6D5St10qcAqom78fTOIeA2QT++Cw2bSO hDj1HAM1UvVydWMBEeunc5RT+xTny/YTVgmQU4To= Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 11B8D1B2184B; Mon, 30 Dec 2019 17:31:33 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 11B8D1B2184B Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 24C671B229D0; Mon, 30 Dec 2019 17:31:31 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:31 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 15/19] net: dsa: tag_mtk: add GRO callbacks Date: Mon, 30 Dec 2019 17:30:23 +0300 Message-Id: <20191230143028.27313-16-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make GRO available for frames with MTK tag by adding the corresponding callbacks to MTK tagger. Signed-off-by: Alexander Lobakin --- net/dsa/tag_mtk.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c index b926ffdf5fb5..13d929160283 100644 --- a/net/dsa/tag_mtk.c +++ b/net/dsa/tag_mtk.c @@ -102,12 +102,85 @@ static void mtk_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, *proto = mtk_tag_encap_proto(skb->data); } +static struct sk_buff *mtk_tag_gro_receive(struct list_head *head, + struct sk_buff *skb) +{ + const struct packet_offload *ptype; + struct sk_buff *p, *pp = NULL; + u32 data_off, data_end; + const u8 *data; + int flush = 1; + + data_off = skb_gro_offset(skb); + data_end = data_off + MTK_HDR_LEN; + + data = skb_gro_header_fast(skb, data_off); + if (skb_gro_header_hard(skb, data_end)) { + data = skb_gro_header_slow(skb, data_end, data_off); + if (unlikely(!data)) + goto out; + } + + rcu_read_lock(); + + ptype = gro_find_receive_by_type(mtk_tag_encap_proto(data)); + if (!ptype) + goto out_unlock; + + flush = 0; + + list_for_each_entry(p, head, list) { + if (!NAPI_GRO_CB(p)->same_flow) + continue; + + /* Data that is to the left to the current position is already + * pulled to the head + */ + if (mtk_tag_source_port(skb->data + data_off) ^ + mtk_tag_source_port(p->data + data_off)) + NAPI_GRO_CB(p)->same_flow = 0; + } + + skb_gro_pull(skb, MTK_HDR_LEN); + skb_gro_postpull_rcsum(skb, data, MTK_HDR_LEN); + + pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); + +out_unlock: + rcu_read_unlock(); +out: + skb_gro_flush_final(skb, pp, flush); + + return pp; +} + +static int mtk_tag_gro_complete(struct sk_buff *skb, int nhoff) +{ + const struct packet_offload *ptype; + int err = -ENOENT; + __be16 proto; + + proto = mtk_tag_encap_proto(skb->data + nhoff); + + rcu_read_lock(); + + ptype = gro_find_complete_by_type(proto); + if (ptype) + err = ptype->callbacks.gro_complete(skb, nhoff + MTK_HDR_LEN); + + rcu_read_unlock(); + + return err; +} + static const struct dsa_device_ops mtk_netdev_ops = { .name = "mtk", .proto = DSA_TAG_PROTO_MTK, .xmit = mtk_tag_xmit, .rcv = mtk_tag_rcv, .flow_dissect = mtk_tag_flow_dissect, + .gro_receive = mtk_tag_gro_receive, + .gro_complete = mtk_tag_gro_complete, .overhead = MTK_HDR_LEN, }; From patchwork Mon Dec 30 14:30:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216466 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="MyShOBWK"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mg0t3wvKz9sR7 for ; Tue, 31 Dec 2019 01:34:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727590AbfL3OeC (ORCPT ); Mon, 30 Dec 2019 09:34:02 -0500 Received: from mail.dlink.ru ([178.170.168.18]:42822 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727538AbfL3OeC (ORCPT ); Mon, 30 Dec 2019 09:34:02 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 9C48A1B219B4; Mon, 30 Dec 2019 17:34:00 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 9C48A1B219B4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716440; bh=MfsRtMSNQGcDzXA0voG56kxHlja09vUFQDB8lQPVTx0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=MyShOBWKexWS+JYXNi5c7TNAB2ATOWbuVYGlAtX6qhu9O9V0vRVl/2XWlUciCY1eF 1O8Aeh+zBDFc1alVEnAnvLpJR6hgA2VSwSwwhNVYc6u2fC+Vro82mt/5g5+rm02p/Y xILCqrJSGmGjIXs9V5Ye9UchYPw4GzRJ9V31LIEU= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id DFEF81B2182A; Mon, 30 Dec 2019 17:31:34 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru DFEF81B2182A Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 174551B229CB; Mon, 30 Dec 2019 17:31:33 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:33 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 16/19] net: dsa: tag_qca: fix doubled Tx statistics Date: Mon, 30 Dec 2019 17:30:24 +0300 Message-Id: <20191230143028.27313-17-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DSA core updates Tx stats for slaves in dsa_slave_xmit(), no need to do it manually in .xmit() tagger callback. Signed-off-by: Alexander Lobakin Reviewed-by: Andrew Lunn --- net/dsa/tag_qca.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c index 8e2dbaaffe59..e1c4dd04734a 100644 --- a/net/dsa/tag_qca.c +++ b/net/dsa/tag_qca.c @@ -33,9 +33,6 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) struct dsa_port *dp = dsa_slave_to_port(dev); u16 *phdr, hdr; - dev->stats.tx_packets++; - dev->stats.tx_bytes += skb->len; - if (skb_cow_head(skb, 0) < 0) return NULL; From patchwork Mon Dec 30 14:30:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216460 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="Qftev2ue"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzw5N3wz9sPc for ; Tue, 31 Dec 2019 01:33:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727816AbfL3OdL (ORCPT ); Mon, 30 Dec 2019 09:33:11 -0500 Received: from fd.dlink.ru ([178.170.168.18]:41874 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727789AbfL3OdJ (ORCPT ); Mon, 30 Dec 2019 09:33:09 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 6BCE91B217AA; Mon, 30 Dec 2019 17:33:05 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 6BCE91B217AA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716387; bh=E3wS4CWwlylImJof0eomCAHaPV4aLBnqVAQ7xnSqdyA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Qftev2ueaGIVY4zzEYCsME+eo1cGckqntBGIumT1i/W04+E3S6EimJDK3QKF8PxpU hBufEmJZN3rih6dRIIzSX8nC0Zvwr+Jm+nx9SkQYTd/H41//GFItsicC8EcqrVuL4l Qt6hZzuiYbVuymQdu8plQk79S1tZholmTCiR0eyk= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id 70CB51B21845; Mon, 30 Dec 2019 17:31:37 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 70CB51B21845 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 4683B1B229D0; Mon, 30 Dec 2019 17:31:35 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:35 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 17/19] net: dsa: tag_qca: switch to bitfield helpers Date: Mon, 30 Dec 2019 17:30:25 +0300 Message-Id: <20191230143028.27313-18-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make code look cleaner and more readable by using bitfield macros. Misc: fix several macro identation and phdr type in qca_tag_xmit(). Signed-off-by: Alexander Lobakin --- net/dsa/tag_qca.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c index e1c4dd04734a..8939abce36d7 100644 --- a/net/dsa/tag_qca.c +++ b/net/dsa/tag_qca.c @@ -3,15 +3,15 @@ * Copyright (c) 2015, The Linux Foundation. All rights reserved. */ +#include #include #include "dsa_priv.h" -#define QCA_HDR_LEN 2 -#define QCA_HDR_VERSION 0x2 +#define QCA_HDR_LEN 2 +#define QCA_HDR_VERSION 0x2 -#define QCA_HDR_RECV_VERSION_MASK GENMASK(15, 14) -#define QCA_HDR_RECV_VERSION_S 14 +#define QCA_HDR_RECV_VERSION(tag) FIELD_GET(GENMASK(15, 14), tag) #define QCA_HDR_RECV_PRIORITY_MASK GENMASK(13, 11) #define QCA_HDR_RECV_PRIORITY_S 11 #define QCA_HDR_RECV_TYPE_MASK GENMASK(10, 6) @@ -19,19 +19,20 @@ #define QCA_HDR_RECV_FRAME_IS_TAGGED BIT(3) #define QCA_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0) -#define QCA_HDR_XMIT_VERSION_MASK GENMASK(15, 14) -#define QCA_HDR_XMIT_VERSION_S 14 +#define QCA_HDR_XMIT_VERSION FIELD_PREP(GENMASK(15, 14), \ + QCA_HDR_VERSION) #define QCA_HDR_XMIT_PRIORITY_MASK GENMASK(13, 11) #define QCA_HDR_XMIT_PRIORITY_S 11 #define QCA_HDR_XMIT_CONTROL_MASK GENMASK(10, 8) #define QCA_HDR_XMIT_CONTROL_S 8 #define QCA_HDR_XMIT_FROM_CPU BIT(7) -#define QCA_HDR_XMIT_DP_BIT_MASK GENMASK(6, 0) +#define QCA_HDR_XMIT_DP(port) FIELD_PREP(GENMASK(6, 0), BIT(port)) static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) { - struct dsa_port *dp = dsa_slave_to_port(dev); - u16 *phdr, hdr; + const struct dsa_port *dp = dsa_slave_to_port(dev); + __be16 *phdr; + u16 hdr; if (skb_cow_head(skb, 0) < 0) return NULL; @@ -39,11 +40,11 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) skb_push(skb, QCA_HDR_LEN); memmove(skb->data, skb->data + QCA_HDR_LEN, 2 * ETH_ALEN); - phdr = (u16 *)(skb->data + 2 * ETH_ALEN); + phdr = (__be16 *)(skb->data + 2 * ETH_ALEN); /* Set the version field, and set destination port information */ - hdr = QCA_HDR_VERSION << QCA_HDR_XMIT_VERSION_S | - QCA_HDR_XMIT_FROM_CPU | BIT(dp->index); + hdr = QCA_HDR_XMIT_VERSION | QCA_HDR_XMIT_FROM_CPU | + QCA_HDR_XMIT_DP(dp->index); *phdr = htons(hdr); @@ -53,7 +54,6 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) static struct sk_buff *qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { - u8 ver; int port; __be16 *phdr, hdr; @@ -68,8 +68,7 @@ static struct sk_buff *qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, hdr = ntohs(*phdr); /* Make sure the version is correct */ - ver = (hdr & QCA_HDR_RECV_VERSION_MASK) >> QCA_HDR_RECV_VERSION_S; - if (unlikely(ver != QCA_HDR_VERSION)) + if (unlikely(QCA_HDR_RECV_VERSION(hdr) != QCA_HDR_VERSION)) return NULL; /* Remove QCA tag and recalculate checksum */ From patchwork Mon Dec 30 14:30:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216463 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="q+4eCZKX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mg064Qqgz9sRC for ; Tue, 31 Dec 2019 01:33:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727767AbfL3OdH (ORCPT ); Mon, 30 Dec 2019 09:33:07 -0500 Received: from mail.dlink.ru ([178.170.168.18]:41828 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727525AbfL3OdH (ORCPT ); Mon, 30 Dec 2019 09:33:07 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id D8C511B219B4; Mon, 30 Dec 2019 17:33:02 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru D8C511B219B4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716383; bh=vMMdZPRhhDCtnbuTLqLyjTW+Dv/ebEhvjE+SEn3R/dc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=q+4eCZKXbiwuHnSky7eu3NnhSbbj/By887r1ZTyr1ZBZG/H/YMJWL3FDkyz0wpoOm HlC7hxvNbCiDhdIiK8GdyFqiIKpVw9fTFg5E3Qsv0wetzhbXuDH8HGZcGqFyEIuE7E e0lWIr2TnhmhhHvxF02fhyDdiHn5T1yI9bLq8DbQ= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id DD1001B21836; Mon, 30 Dec 2019 17:31:39 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru DD1001B21836 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id 6D13F1B229CB; Mon, 30 Dec 2019 17:31:37 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:37 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 18/19] net: dsa: tag_qca: split out common tag accessors Date: Mon, 30 Dec 2019 17:30:26 +0300 Message-Id: <20191230143028.27313-19-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ...to make them available for the upcoming GRO callbacks. Signed-off-by: Alexander Lobakin --- net/dsa/tag_qca.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c index 8939abce36d7..bee2788e034d 100644 --- a/net/dsa/tag_qca.c +++ b/net/dsa/tag_qca.c @@ -28,6 +28,27 @@ #define QCA_HDR_XMIT_FROM_CPU BIT(7) #define QCA_HDR_XMIT_DP(port) FIELD_PREP(GENMASK(6, 0), BIT(port)) +static inline bool qca_tag_sanity_check(const u8 *data) +{ + /* The QCA header is added by the switch between src addr and Ethertype + * At this point, skb->data points to ethertype so header should be + * right before + */ + u16 hdr = ntohs(*(__be16 *)(data - 2)); + + return QCA_HDR_RECV_VERSION(hdr) == QCA_HDR_VERSION; +} + +static inline int qca_tag_source_port(const u8 *data) +{ + return *(data - 1) & QCA_HDR_RECV_SOURCE_PORT_MASK; +} + +static inline __be16 qca_tag_encap_proto(const u8 *data) +{ + return *(__be16 *)data; +} + static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) { const struct dsa_port *dp = dsa_slave_to_port(dev); @@ -55,34 +76,26 @@ static struct sk_buff *qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { int port; - __be16 *phdr, hdr; if (unlikely(!pskb_may_pull(skb, QCA_HDR_LEN))) return NULL; - /* The QCA header is added by the switch between src addr and Ethertype - * At this point, skb->data points to ethertype so header should be - * right before - */ - phdr = (__be16 *)(skb->data - 2); - hdr = ntohs(*phdr); - /* Make sure the version is correct */ - if (unlikely(QCA_HDR_RECV_VERSION(hdr) != QCA_HDR_VERSION)) + if (unlikely(!qca_tag_sanity_check(skb->data))) return NULL; - /* Remove QCA tag and recalculate checksum */ - skb_pull_rcsum(skb, QCA_HDR_LEN); - memmove(skb->data - ETH_HLEN, skb->data - ETH_HLEN - QCA_HDR_LEN, - ETH_HLEN - QCA_HDR_LEN); - /* Get source port information */ - port = (hdr & QCA_HDR_RECV_SOURCE_PORT_MASK); + port = qca_tag_source_port(skb->data); skb->dev = dsa_master_find_slave(dev, 0, port); if (!skb->dev) return NULL; + /* Remove QCA tag and recalculate checksum */ + skb_pull_rcsum(skb, QCA_HDR_LEN); + memmove(skb->data - ETH_HLEN, skb->data - ETH_HLEN - QCA_HDR_LEN, + ETH_HLEN - QCA_HDR_LEN); + return skb; } @@ -90,7 +103,7 @@ static void qca_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, int *offset) { *offset = QCA_HDR_LEN; - *proto = ((__be16 *)skb->data)[0]; + *proto = qca_tag_encap_proto(skb->data); } static const struct dsa_device_ops qca_netdev_ops = { From patchwork Mon Dec 30 14:30:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216457 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="PykzXFtx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mfzJ4lxgz9sPc for ; Tue, 31 Dec 2019 01:32:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727521AbfL3Ocn (ORCPT ); Mon, 30 Dec 2019 09:32:43 -0500 Received: from fd.dlink.ru ([178.170.168.18]:41150 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727525AbfL3Occ (ORCPT ); Mon, 30 Dec 2019 09:32:32 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id B21011B21931; Mon, 30 Dec 2019 17:32:29 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru B21011B21931 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716349; bh=4XferhwJ+noZjvLLF7PDu0hDkxQ/WpPucldtTtVh1Bc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PykzXFtx1t2MEXrs0tIMdbOKfDad5VAkVNmSEhNoU7hTMF2ariiSNkR51nk8XGWBb 0ZeUAY4mo7vwrsDQCGm883y4QMaTB0NYT2zZobEU/qz+SzStGtVlHXAl7n50YuPPAp JfGOKTdfb6MHZWruDWhCSvySdsn8LKsTWIu5FKc8= Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id C096F1B20954; Mon, 30 Dec 2019 17:31:41 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru C096F1B20954 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id D81481B229D0; Mon, 30 Dec 2019 17:31:39 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:39 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 19/19] net: dsa: tag_qca: add GRO callbacks Date: Mon, 30 Dec 2019 17:30:27 +0300 Message-Id: <20191230143028.27313-20-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ...so that frames tagged with this CPU tag type can be correctly processed by the GRO layer. Misc: fix qca_netdev_ops structure identation. Signed-off-by: Alexander Lobakin --- net/dsa/tag_qca.c | 88 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 6 deletions(-) diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c index bee2788e034d..d0cb2299cbe9 100644 --- a/net/dsa/tag_qca.c +++ b/net/dsa/tag_qca.c @@ -106,13 +106,89 @@ static void qca_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, *proto = qca_tag_encap_proto(skb->data); } +static struct sk_buff *qca_tag_gro_receive(struct list_head *head, + struct sk_buff *skb) +{ + const struct packet_offload *ptype; + struct sk_buff *p, *pp = NULL; + u32 data_off, data_end; + const u8 *data; + int flush = 1; + + data_off = skb_gro_offset(skb); + data_end = data_off + QCA_HDR_LEN; + + data = skb_gro_header_fast(skb, data_off); + if (skb_gro_header_hard(skb, data_end)) { + data = skb_gro_header_slow(skb, data_end, data_off); + if (unlikely(!data)) + goto out; + } + + /* Data that is to the left to the current position is already + * pulled to the head + */ + if (unlikely(!qca_tag_sanity_check(skb->data + data_off))) + goto out; + + rcu_read_lock(); + + ptype = gro_find_receive_by_type(qca_tag_encap_proto(data)); + if (!ptype) + goto out_unlock; + + flush = 0; + + list_for_each_entry(p, head, list) { + if (!NAPI_GRO_CB(p)->same_flow) + continue; + + if (qca_tag_source_port(skb->data + data_off) ^ + qca_tag_source_port(p->data + data_off)) + NAPI_GRO_CB(p)->same_flow = 0; + } + + skb_gro_pull(skb, QCA_HDR_LEN); + skb_gro_postpull_rcsum(skb, data, QCA_HDR_LEN); + + pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); + +out_unlock: + rcu_read_unlock(); +out: + skb_gro_flush_final(skb, pp, flush); + + return pp; +} + +static int qca_tag_gro_complete(struct sk_buff *skb, int nhoff) +{ + const struct packet_offload *ptype; + int err = -ENOENT; + __be16 proto; + + proto = qca_tag_encap_proto(skb->data + nhoff); + + rcu_read_lock(); + + ptype = gro_find_complete_by_type(proto); + if (ptype) + err = ptype->callbacks.gro_complete(skb, nhoff + QCA_HDR_LEN); + + rcu_read_unlock(); + + return err; +} + static const struct dsa_device_ops qca_netdev_ops = { - .name = "qca", - .proto = DSA_TAG_PROTO_QCA, - .xmit = qca_tag_xmit, - .rcv = qca_tag_rcv, - .flow_dissect = qca_tag_flow_dissect, - .overhead = QCA_HDR_LEN, + .name = "qca", + .proto = DSA_TAG_PROTO_QCA, + .xmit = qca_tag_xmit, + .rcv = qca_tag_rcv, + .flow_dissect = qca_tag_flow_dissect, + .gro_receive = qca_tag_gro_receive, + .gro_complete = qca_tag_gro_complete, + .overhead = QCA_HDR_LEN, }; MODULE_LICENSE("GPL"); From patchwork Mon Dec 30 14:30:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 1216467 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=dlink.ru Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=dlink.ru header.i=@dlink.ru header.b="fYhcqLol"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47mg102ht2z9sPc for ; Tue, 31 Dec 2019 01:34:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727688AbfL3OeJ (ORCPT ); Mon, 30 Dec 2019 09:34:09 -0500 Received: from mail.dlink.ru ([178.170.168.18]:42950 "EHLO fd.dlink.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727538AbfL3OeJ (ORCPT ); Mon, 30 Dec 2019 09:34:09 -0500 Received: by fd.dlink.ru (Postfix, from userid 5000) id 87E981B2182A; Mon, 30 Dec 2019 17:34:05 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru 87E981B2182A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dlink.ru; s=mail; t=1577716445; bh=oIQhxpQSU+of0GS4enDiLZVDRRd/vUUBvg7EXVnvZnE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fYhcqLolt1EhnpUopLGMSCLx9VpOQgXu/zRNEWuyCigv50pasfgr1/RzL2USUkerA uu1BpXhpwBwAaVqvkPvnai4JOWLNZ+UsA6tVrJN5ixnmZ7t+7mFvNS2DY+9BNMU+0u QfY1FbHU+6IyksnyTnh/Drtnk3DJOLt8ijzfnI4Y= X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.dlink.ru X-Spam-Level: X-Spam-Status: No, score=-99.2 required=7.5 tests=BAYES_50,URIBL_BLOCKED, USER_IN_WHITELIST autolearn=disabled version=3.4.2 Received: from mail.rzn.dlink.ru (mail.rzn.dlink.ru [178.170.168.13]) by fd.dlink.ru (Postfix) with ESMTP id AD2C11B20206; Mon, 30 Dec 2019 17:31:43 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 fd.dlink.ru AD2C11B20206 Received: from mail.rzn.dlink.ru (localhost [127.0.0.1]) by mail.rzn.dlink.ru (Postfix) with ESMTP id BE9641B229CB; Mon, 30 Dec 2019 17:31:41 +0300 (MSK) Received: from localhost.localdomain (unknown [196.196.203.126]) by mail.rzn.dlink.ru (Postfix) with ESMTPA; Mon, 30 Dec 2019 17:31:41 +0300 (MSK) From: Alexander Lobakin To: "David S. Miller" Cc: Edward Cree , Andrew Lunn , Vivien Didelot , Florian Fainelli , Hauke Mehrtens , Sean Wang , Matthias Brugger , Jiri Pirko , Eric Dumazet , Paolo Abeni , Jakub Kicinski , Alexander Lobakin , Taehee Yoo , Stephen Hemminger , Stanislav Fomichev , Daniel Borkmann , Song Liu , Matteo Croce , Jakub Sitnicki , Paul Blakey , Yoshiki Komachi , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH RFC net-next 20/20] net: core: add (unlikely) DSA support in napi_gro_frags() Date: Mon, 30 Dec 2019 17:30:28 +0300 Message-Id: <20191230143028.27313-21-alobakin@dlink.ru> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191230143028.27313-1-alobakin@dlink.ru> References: <20191230143028.27313-1-alobakin@dlink.ru> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make napi_gro_frags() available for DSA-enabled device drivers by adding the same condition for them as the one in eth_type_trans(). Signed-off-by: Alexander Lobakin --- net/core/dev.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index f1b8afcfbc0f..923b930a4506 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -142,6 +142,7 @@ #include #include #include +#include #include "net-sysfs.h" @@ -5951,6 +5952,7 @@ static gro_result_t napi_frags_finish(struct napi_struct *napi, */ static struct sk_buff *napi_frags_skb(struct napi_struct *napi) { + struct net_device *dev = napi->dev; struct sk_buff *skb = napi->skb; const struct ethhdr *eth; unsigned int hlen = sizeof(*eth); @@ -5964,7 +5966,7 @@ static struct sk_buff *napi_frags_skb(struct napi_struct *napi) eth = skb_gro_header_slow(skb, hlen, 0); if (unlikely(!eth)) { net_warn_ratelimited("%s: dropping impossible skb from %s\n", - __func__, napi->dev->name); + __func__, dev->name); napi_reuse_skb(napi, skb); return NULL; } @@ -5978,10 +5980,13 @@ static struct sk_buff *napi_frags_skb(struct napi_struct *napi) /* * This works because the only protocols we care about don't require - * special handling. + * special handling... except for DSA. * We'll fix it up properly in napi_frags_finish() */ - skb->protocol = eth->h_proto; + if (unlikely(netdev_uses_dsa(dev)) && dsa_can_decode(skb, dev)) + skb->protocol = htons(ETH_P_XDSA); + else + skb->protocol = eth->h_proto; return skb; }