mbox series

[v6,00/18] net/mlx5: Add HW steering low level support

Message ID 20221020155749.16643-1-valex@nvidia.com (mailing list archive)
Headers
Series net/mlx5: Add HW steering low level support |

Message

Alex Vesker Oct. 20, 2022, 3:57 p.m. UTC
  Mellanox ConnetX devices supports packet matching, packet modification and
redirection. These functionalities are also referred to as flow-steering.
To configure a steering rule, the rule is written to the device owned
memory, this memory is accessed and cached by the device when processing
a packet.

The highlight of this patchset is supporting HW Steering (HWS) which
is the new technology supported in new ConnectX devices, HWS allows
configuring steering rules directly to the HW using special HW queues
with minimal CPU effort.

This patchset is the internal low layer implementation for HWS used by
the mlx5 PMD. The mlx5dr (direct rule) is layer that bridges between the
PMD and the HW by configuring the HW offloads based on the PMD logic

v2:
Fix check patch and cosmetic changes

v3:
-Fix unsupported items
-Fix compilation with mlx5dv dependency

v4:
-Fix compile on Windows

v5:
-Fix compile on old rdma-core or no rdma core

v6:
-Fix meson style and improve configure
-Checkpatch and compilation fixes
-Fix action number issue

Alex Vesker (8):
  net/mlx5: Add additional glue functions for HWS
  net/mlx5/hws: Add HWS send layer
  net/mlx5/hws: Add HWS definer layer
  net/mlx5/hws: Add HWS context object
  net/mlx5/hws: Add HWS table object
  net/mlx5/hws: Add HWS matcher object
  net/mlx5/hws: Add HWS rule object
  net/mlx5/hws: Enable HWS

Bing Zhao (2):
  common/mlx5: query set capability of registers
  net/mlx5: provide the available tag registers

Dariusz Sosnowski (1):
  net/mlx5: add port to metadata conversion

Erez Shitrit (3):
  net/mlx5/hws: Add HWS command layer
  net/mlx5/hws: Add HWS pool and buddy
  net/mlx5/hws: Add HWS action object

Hamdan Igbaria (1):
  net/mlx5/hws: Add HWS debug layer

Suanming Mou (3):
  net/mlx5: split flow item translation
  net/mlx5: split flow item matcher and value translation
  net/mlx5: add hardware steering item translation function

 doc/guides/nics/features/default.ini         |    1 +
 doc/guides/nics/features/mlx5.ini            |    1 +
 doc/guides/nics/mlx5.rst                     |    5 +-
 doc/guides/rel_notes/release_22_11.rst       |    4 +
 drivers/common/mlx5/linux/meson.build        |   11 +-
 drivers/common/mlx5/linux/mlx5_glue.c        |  121 +-
 drivers/common/mlx5/linux/mlx5_glue.h        |   17 +
 drivers/common/mlx5/mlx5_devx_cmds.c         |   30 +
 drivers/common/mlx5/mlx5_devx_cmds.h         |    2 +
 drivers/common/mlx5/mlx5_prm.h               |  652 ++++-
 drivers/net/mlx5/hws/meson.build             |   18 +
 drivers/net/mlx5/{mlx5_dr.h => hws/mlx5dr.h} |  201 +-
 drivers/net/mlx5/hws/mlx5dr_action.c         | 2237 +++++++++++++++
 drivers/net/mlx5/hws/mlx5dr_action.h         |  253 ++
 drivers/net/mlx5/hws/mlx5dr_buddy.c          |  200 ++
 drivers/net/mlx5/hws/mlx5dr_buddy.h          |   22 +
 drivers/net/mlx5/hws/mlx5dr_cmd.c            |  948 +++++++
 drivers/net/mlx5/hws/mlx5dr_cmd.h            |  230 ++
 drivers/net/mlx5/hws/mlx5dr_context.c        |  223 ++
 drivers/net/mlx5/hws/mlx5dr_context.h        |   40 +
 drivers/net/mlx5/hws/mlx5dr_debug.c          |  462 ++++
 drivers/net/mlx5/hws/mlx5dr_debug.h          |   28 +
 drivers/net/mlx5/hws/mlx5dr_definer.c        | 1968 ++++++++++++++
 drivers/net/mlx5/hws/mlx5dr_definer.h        |  585 ++++
 drivers/net/mlx5/hws/mlx5dr_internal.h       |   93 +
 drivers/net/mlx5/hws/mlx5dr_matcher.c        |  919 +++++++
 drivers/net/mlx5/hws/mlx5dr_matcher.h        |   76 +
 drivers/net/mlx5/hws/mlx5dr_pat_arg.c        |  511 ++++
 drivers/net/mlx5/hws/mlx5dr_pat_arg.h        |   83 +
 drivers/net/mlx5/hws/mlx5dr_pool.c           |  672 +++++
 drivers/net/mlx5/hws/mlx5dr_pool.h           |  152 ++
 drivers/net/mlx5/hws/mlx5dr_rule.c           |  528 ++++
 drivers/net/mlx5/hws/mlx5dr_rule.h           |   50 +
 drivers/net/mlx5/hws/mlx5dr_send.c           |  844 ++++++
 drivers/net/mlx5/hws/mlx5dr_send.h           |  275 ++
 drivers/net/mlx5/hws/mlx5dr_table.c          |  248 ++
 drivers/net/mlx5/hws/mlx5dr_table.h          |   44 +
 drivers/net/mlx5/linux/mlx5_os.c             |   12 +-
 drivers/net/mlx5/meson.build                 |    7 +-
 drivers/net/mlx5/mlx5.c                      |    9 +-
 drivers/net/mlx5/mlx5.h                      |    8 +-
 drivers/net/mlx5/mlx5_defs.h                 |    2 +
 drivers/net/mlx5/mlx5_devx.c                 |    2 +-
 drivers/net/mlx5/mlx5_dr.c                   |  383 ---
 drivers/net/mlx5/mlx5_flow.c                 |   29 +-
 drivers/net/mlx5/mlx5_flow.h                 |  174 +-
 drivers/net/mlx5/mlx5_flow_dv.c              | 2567 +++++++++---------
 drivers/net/mlx5/mlx5_flow_hw.c              |  115 +-
 48 files changed, 14368 insertions(+), 1694 deletions(-)
 create mode 100644 drivers/net/mlx5/hws/meson.build
 rename drivers/net/mlx5/{mlx5_dr.h => hws/mlx5dr.h} (67%)
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_action.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_action.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_buddy.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_buddy.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_cmd.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_cmd.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_context.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_context.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_debug.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_debug.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_definer.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_definer.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_internal.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_matcher.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_matcher.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_pat_arg.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_pat_arg.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_pool.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_pool.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_rule.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_rule.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_send.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_send.h
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_table.c
 create mode 100644 drivers/net/mlx5/hws/mlx5dr_table.h
 delete mode 100644 drivers/net/mlx5/mlx5_dr.c
  

Comments

Raslan Darawsheh Oct. 24, 2022, 10:56 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: Alex Vesker <valex@nvidia.com>
> Sent: Thursday, October 20, 2022 6:58 PM
> To: Alex Vesker <valex@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL)
> <thomas@monjalon.net>; Suanming Mou <suanmingm@nvidia.com>
> Cc: dev@dpdk.org; Ori Kam <orika@nvidia.com>
> Subject: [v6 00/18] net/mlx5: Add HW steering low level support
> 
> Mellanox ConnetX devices supports packet matching, packet modification
> and redirection. These functionalities are also referred to as flow-steering.
> To configure a steering rule, the rule is written to the device owned memory,
> this memory is accessed and cached by the device when processing a packet.
> 
> The highlight of this patchset is supporting HW Steering (HWS) which is the
> new technology supported in new ConnectX devices, HWS allows configuring
> steering rules directly to the HW using special HW queues with minimal CPU
> effort.
> 
> This patchset is the internal low layer implementation for HWS used by the
> mlx5 PMD. The mlx5dr (direct rule) is layer that bridges between the PMD
> and the HW by configuring the HW offloads based on the PMD logic
> 
> v2:
> Fix check patch and cosmetic changes
> 
> v3:
> -Fix unsupported items
> -Fix compilation with mlx5dv dependency
> 
> v4:
> -Fix compile on Windows
> 
> v5:
> -Fix compile on old rdma-core or no rdma core
> 
> v6:
> -Fix meson style and improve configure
> -Checkpatch and compilation fixes
> -Fix action number issue
> 
> Alex Vesker (8):
>   net/mlx5: Add additional glue functions for HWS
>   net/mlx5/hws: Add HWS send layer
>   net/mlx5/hws: Add HWS definer layer
>   net/mlx5/hws: Add HWS context object
>   net/mlx5/hws: Add HWS table object
>   net/mlx5/hws: Add HWS matcher object
>   net/mlx5/hws: Add HWS rule object
>   net/mlx5/hws: Enable HWS
> 
> Bing Zhao (2):
>   common/mlx5: query set capability of registers
>   net/mlx5: provide the available tag registers
> 
> Dariusz Sosnowski (1):
>   net/mlx5: add port to metadata conversion
> 
> Erez Shitrit (3):
>   net/mlx5/hws: Add HWS command layer
>   net/mlx5/hws: Add HWS pool and buddy
>   net/mlx5/hws: Add HWS action object
> 
> Hamdan Igbaria (1):
>   net/mlx5/hws: Add HWS debug layer
> 
> Suanming Mou (3):
>   net/mlx5: split flow item translation
>   net/mlx5: split flow item matcher and value translation
>   net/mlx5: add hardware steering item translation function
> 
>  doc/guides/nics/features/default.ini         |    1 +
>  doc/guides/nics/features/mlx5.ini            |    1 +
>  doc/guides/nics/mlx5.rst                     |    5 +-
>  doc/guides/rel_notes/release_22_11.rst       |    4 +
>  drivers/common/mlx5/linux/meson.build        |   11 +-
>  drivers/common/mlx5/linux/mlx5_glue.c        |  121 +-
>  drivers/common/mlx5/linux/mlx5_glue.h        |   17 +
>  drivers/common/mlx5/mlx5_devx_cmds.c         |   30 +
>  drivers/common/mlx5/mlx5_devx_cmds.h         |    2 +
>  drivers/common/mlx5/mlx5_prm.h               |  652 ++++-
>  drivers/net/mlx5/hws/meson.build             |   18 +
>  drivers/net/mlx5/{mlx5_dr.h => hws/mlx5dr.h} |  201 +-
>  drivers/net/mlx5/hws/mlx5dr_action.c         | 2237 +++++++++++++++
>  drivers/net/mlx5/hws/mlx5dr_action.h         |  253 ++
>  drivers/net/mlx5/hws/mlx5dr_buddy.c          |  200 ++
>  drivers/net/mlx5/hws/mlx5dr_buddy.h          |   22 +
>  drivers/net/mlx5/hws/mlx5dr_cmd.c            |  948 +++++++
>  drivers/net/mlx5/hws/mlx5dr_cmd.h            |  230 ++
>  drivers/net/mlx5/hws/mlx5dr_context.c        |  223 ++
>  drivers/net/mlx5/hws/mlx5dr_context.h        |   40 +
>  drivers/net/mlx5/hws/mlx5dr_debug.c          |  462 ++++
>  drivers/net/mlx5/hws/mlx5dr_debug.h          |   28 +
>  drivers/net/mlx5/hws/mlx5dr_definer.c        | 1968 ++++++++++++++
>  drivers/net/mlx5/hws/mlx5dr_definer.h        |  585 ++++
>  drivers/net/mlx5/hws/mlx5dr_internal.h       |   93 +
>  drivers/net/mlx5/hws/mlx5dr_matcher.c        |  919 +++++++
>  drivers/net/mlx5/hws/mlx5dr_matcher.h        |   76 +
>  drivers/net/mlx5/hws/mlx5dr_pat_arg.c        |  511 ++++
>  drivers/net/mlx5/hws/mlx5dr_pat_arg.h        |   83 +
>  drivers/net/mlx5/hws/mlx5dr_pool.c           |  672 +++++
>  drivers/net/mlx5/hws/mlx5dr_pool.h           |  152 ++
>  drivers/net/mlx5/hws/mlx5dr_rule.c           |  528 ++++
>  drivers/net/mlx5/hws/mlx5dr_rule.h           |   50 +
>  drivers/net/mlx5/hws/mlx5dr_send.c           |  844 ++++++
>  drivers/net/mlx5/hws/mlx5dr_send.h           |  275 ++
>  drivers/net/mlx5/hws/mlx5dr_table.c          |  248 ++
>  drivers/net/mlx5/hws/mlx5dr_table.h          |   44 +
>  drivers/net/mlx5/linux/mlx5_os.c             |   12 +-
>  drivers/net/mlx5/meson.build                 |    7 +-
>  drivers/net/mlx5/mlx5.c                      |    9 +-
>  drivers/net/mlx5/mlx5.h                      |    8 +-
>  drivers/net/mlx5/mlx5_defs.h                 |    2 +
>  drivers/net/mlx5/mlx5_devx.c                 |    2 +-
>  drivers/net/mlx5/mlx5_dr.c                   |  383 ---
>  drivers/net/mlx5/mlx5_flow.c                 |   29 +-
>  drivers/net/mlx5/mlx5_flow.h                 |  174 +-
>  drivers/net/mlx5/mlx5_flow_dv.c              | 2567 +++++++++---------
>  drivers/net/mlx5/mlx5_flow_hw.c              |  115 +-
>  48 files changed, 14368 insertions(+), 1694 deletions(-)  create mode 100644
> drivers/net/mlx5/hws/meson.build  rename drivers/net/mlx5/{mlx5_dr.h =>
> hws/mlx5dr.h} (67%)  create mode 100644
> drivers/net/mlx5/hws/mlx5dr_action.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_action.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_buddy.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_buddy.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_cmd.c  create mode
> 100644 drivers/net/mlx5/hws/mlx5dr_cmd.h  create mode 100644
> drivers/net/mlx5/hws/mlx5dr_context.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_context.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_debug.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_debug.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_definer.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_definer.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_internal.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_matcher.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_matcher.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_pat_arg.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_pat_arg.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_pool.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_pool.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_rule.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_rule.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_send.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_send.h
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_table.c
>  create mode 100644 drivers/net/mlx5/hws/mlx5dr_table.h
>  delete mode 100644 drivers/net/mlx5/mlx5_dr.c
> 
> --
> 2.18.1

Series applied to next-net-mlx with small modifications to the commit logs, 

Kindest regards,
Raslan Darawsheh