From: Paul Blakey <paulb@mellanox.com>
To: Paul Blakey <paulb@mellanox.com>,
Saeed Mahameed <saeedm@mellanox.com>,
Oz Shlomo <ozsh@mellanox.com>,
Jakub Kicinski <jakub.kicinski@netronome.com>,
Vlad Buslov <vladbu@mellanox.com>,
David Miller <davem@davemloft.net>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Jiri Pirko <jiri@resnulli.us>, Roi Dayan <roid@mellanox.com>
Subject: [PATCH net-next v2 00/13] Handle multi chain hardware misses
Date: Wed, 22 Jan 2020 15:52:45 +0200 [thread overview]
Message-ID: <1579701178-24624-1-git-send-email-paulb@mellanox.com> (raw)
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 | 819 ++++++++++++++++-----
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 | 240 +++++-
.../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 | 31 +-
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, 1751 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
--
1.8.3.1
next reply other threads:[~2020-01-22 13:53 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-22 13:52 Paul Blakey [this message]
2020-01-22 13:52 ` [PATCH net-next v2 01/13] net: sched: support skb chain ext in tc classification path Paul Blakey
2020-01-22 15:29 ` Jakub Kicinski
2020-01-23 7:06 ` Jiri Pirko
2020-01-24 8:46 ` Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 02/13] net/mlx5: Add new driver lib for mappings unique ids to data Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 03/13] net/mlx5: E-Switch, Move source port on reg_c0 to the upper 16 bits Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 04/13] net/mlx5: E-Switch, Get reg_c0 value on CQE Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 05/13] net/mlx5: E-Switch, Mark miss packets with new chain id mapping Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 06/13] net/mlx5e: Rx, Split rep rx mpwqe handler from nic Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 07/13] net/mlx5: E-Switch, Restore chain id on miss Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 08/13] net/mlx5e: Allow re-allocating mod header actions Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 09/13] net/mlx5e: Move tc tunnel parsing logic with the rest at tc_tun module Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 10/13] net/mlx5e: Disallow inserting vxlan/vlan egress rules without decap/pop Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 11/13] net/mlx5e: Support inner header rewrite with goto action Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 12/13] net/mlx5: E-Switch, Get reg_c1 value on miss Paul Blakey
2020-01-22 13:52 ` [PATCH net-next-mlx5 v2 13/13] net/mlx5e: Restore tunnel metadata " Paul Blakey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1579701178-24624-1-git-send-email-paulb@mellanox.com \
--to=paulb@mellanox.com \
--cc=davem@davemloft.net \
--cc=jakub.kicinski@netronome.com \
--cc=jiri@resnulli.us \
--cc=netdev@vger.kernel.org \
--cc=ozsh@mellanox.com \
--cc=roid@mellanox.com \
--cc=saeedm@mellanox.com \
--cc=vladbu@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).