Hi Dave, This series adds misc updates to mlx5 driver. For more information please see tag log below.
Please pull and let me know if there is any problem. Please note that the series starts with a merge of mlx5-next branch, to resolve and avoid dependency with rdma tree. Thanks, Saeed. --- The following changes since commit 7fe4d43eccde0dc83131aca206e07e00673f43aa: Merge branch 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux (2019-05-31 13:04:06 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git tags/mlx5-updates-2019-05-31 for you to fetch changes up to ca6c7df00a89206f142365091c689059fc0b67bf: net/mlx5e: TX, Improve performance under GSO workload (2019-05-31 13:04:26 -0700) ---------------------------------------------------------------- mlx5-updates-2019-05-31 This series provides some updates to mlx5 core and netdevice driver. 1) use __netdev_tx_sent_queue() to improve performance under GSO workload 2) Allow matching only enc_key_id/enc_dst_port for decapsulation action 3) Geneve support: This patchset adds support for GENEVE tunnel encap/decap flows offload: encapsulating layer 2 Ethernet frames within layer 4 UDP datagrams. The driver supports 6081 destination UDP port number, which is the default IANA-assigned port. Encap: ConnectX-5 inserts the header (w/ or w/o Geneve TLV options) that is provided by the mlx5 driver to the outgoing packet. Decap: Geneve header is matched and the packet is decapsulated. Notes about decap flows with Geneve TLV Options: - Support offloading of 32-bit options data only - At any given time, only one combination of class/type parameters can be offloaded, but the same class/type combination can have many different flows offloaded with different 32-bit option data - Options with value of 0 can't be offloaded Managing Geneve TLV options: Matching (on receive) is done by ConnectX-5 flex parser. Geneve TLV options are managed using General Object of type “Geneve TLV Options”. When the first flow with a certain class/type values is requested to be offloaded, the driver creates a FW object with FW command (Geneve TLV Options general object) and starts counting the number of flows using this object. During this time, any request with a different class/type values will fail to be offloaded. Once the refcount reaches 0, the driver destroys the TLV options general object, and can now offload a flow with any class/type parameters. Geneve TLV Options object is added to core device. It is currently used to manage Geneve TLV options general object allocation in FW and its reference counting only. In the future it will also be used for managing geneve ports by registering callbacks for ndo_udp_tunnel_add/del. TC tunnel code refactoring: As a preparation for Geneve code, the TC tunnel code in mlx5 was rearranged in a modular way, so that it would be easier to add future tunnels: - Defined tc tunnel object with the fields and callbacks that any tunnel must implement. - Define tc UDP tunnel object for UDP tunnels, such as VXLAN - Move each tunnel code (GRE, VXLAN) to its own separate file - Rewrite tc tunnel implementation in a general way – using only the objects and their callbacks. 4) Termination tables: Actions in tables set with the termination flag are guaranteed to terminate the action list. Thus, potential looping functionality (e.g. haripin) can safely be executed without potential loops. ---------------------------------------------------------------- Erez Alfasi (1): net/mlx5e: TX, Improve performance under GSO workload Oz Shlomo (1): net/mlx5e: Use termination table for VLAN push actions Tonghao Zhang (1): net/mlx5e: Allow matching only enc_key_id/enc_dst_port for decapsulation action Vu Pham (1): net/mlx5e: Generalize vport type in vport representor Yevgeny Kliteynik (5): net/mlx5e: Enable setting multiple match criteria for flow group net/mlx5: Geneve, Manage Geneve TLV options net/mlx5e: Geneve, Keep tunnel info as pointer to the original struct net/mlx5e: Rearrange tc tunnel code in a modular way net/mlx5e: Geneve, Add support for encap/decap flows offload drivers/net/ethernet/mellanox/mlx5/core/Makefile | 7 +- .../net/ethernet/mellanox/mlx5/core/en/tc_tun.c | 287 ++++++------------ .../net/ethernet/mellanox/mlx5/core/en/tc_tun.h | 41 ++- .../ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c | 335 +++++++++++++++++++++ .../ethernet/mellanox/mlx5/core/en/tc_tun_gre.c | 95 ++++++ .../ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c | 151 ++++++++++ drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 52 ++-- drivers/net/ethernet/mellanox/mlx5/core/en_rep.h | 5 +- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 74 ++--- drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 7 +- drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | 22 ++ .../ethernet/mellanox/mlx5/core/eswitch_offloads.c | 23 +- .../mellanox/mlx5/core/eswitch_offloads_termtbl.c | 277 +++++++++++++++++ .../net/ethernet/mellanox/mlx5/core/lib/geneve.c | 157 ++++++++++ .../net/ethernet/mellanox/mlx5/core/lib/geneve.h | 33 ++ drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 + include/linux/mlx5/driver.h | 2 + 17 files changed, 1293 insertions(+), 279 deletions(-) create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_gre.c create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h