From patchwork Tue Jan 21 16:16:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Blakey X-Patchwork-Id: 1226645 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=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 482DFR40ZHz9sP6 for ; Wed, 22 Jan 2020 03:16:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729442AbgAUQQ6 (ORCPT ); Tue, 21 Jan 2020 11:16:58 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:43487 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729285AbgAUQQ5 (ORCPT ); Tue, 21 Jan 2020 11:16:57 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from paulb@mellanox.com) with ESMTPS (AES256-SHA encrypted); 21 Jan 2020 18:16:53 +0200 Received: from reg-r-vrt-019-120.mtr.labs.mlnx (reg-r-vrt-019-120.mtr.labs.mlnx [10.213.19.120]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00LGGrWt008966; Tue, 21 Jan 2020 18:16:53 +0200 From: Paul Blakey To: Paul Blakey , Saeed Mahameed , Oz Shlomo , Jakub Kicinski , Vlad Buslov , David Miller , "netdev@vger.kernel.org" , Jiri Pirko Subject: [PATCH net-next 00/13] Handle multi chain hardware misses Date: Tue, 21 Jan 2020 18:16:09 +0200 Message-Id: <1579623382-6934-1-git-send-email-paulb@mellanox.com> X-Mailer: git-send-email 1.8.4.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi David/Jakub/Saeed, TC multi chain configuration can cause offloaded tc chains to miss in hardware after jumping to some chain. In such cases the software should continue from the chain that was missed in hardware, as the hardware may have manipulated the packet and updated some counters. The first patch enables tc classification to start from a specified chain by re-using the existing TC_SKB_EXT skb extension. The next six patches are the Mellanox driver implementation of the miss path. The driver loads the last processed chain from HW register (reg_c0, then flow_tag) and stores it on the TC_SKB_EXT skb extension for continued processing in software. The final six patches introduce the Mellanox driver implementation for handling tunnel restore when the packet was decapsulated on first chain hop. Early decapsulation creates two issues: 1. The outer headers will not be available in later chains 2. If the HW will miss on later chains, the packet will come up to software without the tunnel header. Therefore, sw matches on the tunnel info will miss. Address these issues by mapping a unique id per tunnel info. The mapping is stored on hardware register (c1) when the packet is decapsulated. On miss, use the id to restore the tunnel info metadata on the skb. Note that miss path handling of multi-chain rules is a required infrastructure for connection tracking hardware offload. The connection tracking offload series will follow this one. Paul Blakey (12): net/mlx5: Add new driver lib for mappings unique ids to data net/mlx5: E-Switch, Move source port on reg_c0 to the upper 16 bits net/mlx5: E-Switch, Get reg_c0 value on CQE net/mlx5: E-Switch, Mark miss packets with new chain id mapping net/mlx5e: Rx, Split rep rx mpwqe handler from nic net/mlx5: E-Switch, Restore chain id on miss net/mlx5e: Allow re-allocating mod header actions net/mlx5e: Move tc tunnel parsing logic with the rest at tc_tun module net/mlx5e: Disallow inserting vxlan/vlan egress rules without decap/pop net/mlx5e: Support inner header rewrite with goto action net/mlx5: E-Switch, Get reg_c1 value on miss net/mlx5e: Restore tunnel metadata on miss Vlad Buslov (1): net: sched: support skb chain ext in tc classification path drivers/infiniband/hw/mlx5/main.c | 3 +- drivers/net/ethernet/mellanox/mlx5/core/Makefile | 2 +- .../net/ethernet/mellanox/mlx5/core/en/tc_tun.c | 112 ++- .../net/ethernet/mellanox/mlx5/core/en/tc_tun.h | 3 +- drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 4 +- drivers/net/ethernet/mellanox/mlx5/core/en_rep.h | 7 + drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 66 ++ drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 817 ++++++++++++++++----- drivers/net/ethernet/mellanox/mlx5/core/en_tc.h | 45 ++ drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | 16 + .../ethernet/mellanox/mlx5/core/eswitch_offloads.c | 253 ++++++- .../mellanox/mlx5/core/eswitch_offloads_chains.c | 130 +++- .../mellanox/mlx5/core/eswitch_offloads_chains.h | 4 +- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 4 +- .../net/ethernet/mellanox/mlx5/core/lib/mapping.c | 362 +++++++++ .../net/ethernet/mellanox/mlx5/core/lib/mapping.h | 31 + include/linux/mlx5/eswitch.h | 11 +- include/net/pkt_cls.h | 17 +- include/net/sch_generic.h | 6 +- net/core/dev.c | 6 +- net/sched/cls_api.c | 64 +- net/sched/sch_atm.c | 2 +- net/sched/sch_cake.c | 2 +- net/sched/sch_cbq.c | 2 +- net/sched/sch_drr.c | 2 +- net/sched/sch_dsmark.c | 2 +- net/sched/sch_fq_codel.c | 2 +- net/sched/sch_generic.c | 3 +- net/sched/sch_hfsc.c | 3 +- net/sched/sch_htb.c | 3 +- net/sched/sch_ingress.c | 5 +- net/sched/sch_multiq.c | 2 +- net/sched/sch_prio.c | 2 +- net/sched/sch_qfq.c | 2 +- net/sched/sch_sfb.c | 2 +- net/sched/sch_sfq.c | 2 +- 36 files changed, 1742 insertions(+), 257 deletions(-) create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/lib/mapping.c create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/lib/mapping.h