Skip to content

net/mlx5: Add HW steering low level support

Alex Vesker dpdk-dev 6 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v6 Latest18 patches 18 repliesIn review
  2. v518 patches 0 repliesSuperseded
  3. v418 patches 0 repliesSuperseded
Earlier versions · 3
VersionPostedPatchesRepliesStatus
v318 patches0 repliesSuperseded
v219 patches0 repliesSuperseded
v119 patches0 repliesSuperseded

Changes in v6 from the cover letter

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

Patches in v6 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/18net/mlx5: split flow item translationdrivers/net/mlx5/mlx5_flow_dv.c+979 -9361 reply
2/18net/mlx5: split flow item matcher and value translationdrivers/net/mlx5/mlx5_flow.h drivers/net/mlx5/mlx5_flow_dv.c+1185 -11611 reply
3/18net/mlx5: add hardware steering item translation functiondrivers/net/mlx5/mlx5_flow.c drivers/net/mlx5/mlx5_flow.h drivers/net/mlx5/mlx5_flow_dv.c+155 -411 reply
4/18net/mlx5: add port to metadata conversiondrivers/net/mlx5/linux/mlx5_os.c drivers/net/mlx5/mlx5.c drivers/net/mlx5/mlx5_flow.c +2 more+97 -11 reply
5/18common/mlx5: query set capability of registersdrivers/common/mlx5/mlx5_devx_cmds.c drivers/common/mlx5/mlx5_devx_cmds.h drivers/common/mlx5/mlx5_prm.h+73 -41 reply
6/18net/mlx5: provide the available tag registersdrivers/net/mlx5/linux/mlx5_os.c drivers/net/mlx5/mlx5.c drivers/net/mlx5/mlx5.h +4 more+121 -01 reply
7/18net/mlx5: Add additional glue functions for HWSdrivers/common/mlx5/linux/mlx5_glue.c drivers/common/mlx5/linux/mlx5_glue.h+131 -71 reply
8/18net/mlx5/hws: Add HWS command layerdrivers/common/mlx5/mlx5_prm.h drivers/net/mlx5/hws/mlx5dr_cmd.c drivers/net/mlx5/hws/mlx5dr_cmd.h+1775 -101 reply
9/18net/mlx5/hws: Add HWS pool and buddydrivers/net/mlx5/hws/mlx5dr_buddy.c drivers/net/mlx5/hws/mlx5dr_buddy.h drivers/net/mlx5/hws/mlx5dr_pool.c +1 more+1046 -01 reply
10/18net/mlx5/hws: Add HWS send layerdrivers/net/mlx5/hws/mlx5dr_send.c drivers/net/mlx5/hws/mlx5dr_send.h+1119 -01 reply
11/18net/mlx5/hws: Add HWS definer layerdoc/guides/nics/features/default.ini doc/guides/nics/features/mlx5.ini drivers/net/mlx5/hws/mlx5dr_definer.c +1 more+2555 -01 reply
12/18net/mlx5/hws: Add HWS context objectdrivers/net/mlx5/hws/mlx5dr_context.c drivers/net/mlx5/hws/mlx5dr_context.h+263 -01 reply
13/18net/mlx5/hws: Add HWS table objectdrivers/net/mlx5/hws/mlx5dr_table.c drivers/net/mlx5/hws/mlx5dr_table.h+292 -01 reply
14/18net/mlx5/hws: Add HWS matcher objectdrivers/common/mlx5/linux/meson.build drivers/net/mlx5/hws/mlx5dr_matcher.c drivers/net/mlx5/hws/mlx5dr_matcher.h+997 -01 reply
15/18net/mlx5/hws: Add HWS rule objectdrivers/net/mlx5/hws/mlx5dr_rule.c drivers/net/mlx5/hws/mlx5dr_rule.h+578 -01 reply
16/18net/mlx5/hws: Add HWS action objectdrivers/net/mlx5/hws/mlx5dr_action.c drivers/net/mlx5/hws/mlx5dr_action.h drivers/net/mlx5/hws/mlx5dr_pat_arg.c +1 more+3084 -00 replies
17/18net/mlx5/hws: Add HWS debug layerdrivers/net/mlx5/hws/mlx5dr_debug.c drivers/net/mlx5/hws/mlx5dr_debug.h+490 -01 reply
18/18net/mlx5/hws: Enable HWSdoc/guides/nics/mlx5.rst doc/guides/rel_notes/release_22_11.rst drivers/common/mlx5/linux/meson.build +11 more+326 -4321 reply

Reviews trailers per patch

17 of 18 patches have a Reviewed-by or Acked-by.

PatchViacheslav Ovsiienko
1/18A-b
2/18A-b
3/18A-b
4/18A-b
5/18A-b
6/18A-b
7/18A-b
8/18A-b
9/18A-b
10/18A-b
11/18A-b
12/18A-b
13/18A-b
14/18A-b
15/18A-b
16/18
17/18A-b
18/18A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v6 thread

Cover letter [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
Signature · 1 line
2.18.1