[PATCH 26.07 0/5] net/mlx5: legacy vport match support with HWS

Dariusz Sosnowski dsosnowski at nvidia.com
Wed Mar 25 10:07:52 CET 2026


NVIDIA NICs and DPUs have an embedded switch (E-Switch)
to which all associated functions (PFs, VFs, SFs) and physical ports
are connected through virtual ports (vports).
mlx5 PMD supports devices with E-Switch enabled and
also exposes flow rule offloading to the E-Switch
through transfer flow rules.

Flow rules matching on vports (with flow item REPRESENTED_PORT)
can match on specific vport using one of the two internal mechanisms:

- vport metadata - E-Switch internally tags all packets with a metadata value
  associated with originating vport.
  mlx5 PMD can match on that metadata through a specialized HW register in each flow rule.
  vport metadata enables features such as VF-LAG, Multiport E-Switch and
  others mentioned in [1].
- legacy match - A static value known as "source vport" is assigned to each vport.
  These values are not globally unique, because they are statically assigned per E-Switch
  (e.g., VF0 on each of the PFs will have the same source_vport number).

Users can select the vport matching mode through devlink [1].
vport metadata matching mode is the default and is enough for most of the use cases.
However, internally tagging all the packets with metadata values,
increases the packet latency in the E-Switch. As described in the linked kernel docs,
disabling vport metadata matching can increase packet rate up to 20%.
If features provided by vport metadata matching are not required,
it can be disabled to increase E-Switch's throughput.

mlx5 PMD with HW Steering flow engine enabled, only supported
vport metadata mode when running on a device with enabled E-Switch.
Goal of this patchset is to enable support of devices with
disabled vport metadata matching. This is purely an internal change in mlx5 PMD.
No changes in DPDK applications should be required.

- Patches 1-2 - Extend information queried from the device by mlx5 PMD
  to include information necessary to implement legacy vport match.
  This data is always available, regardless of selected E-Switch matching mode.
- Patch 3 - Adjusts internal translation of DPDK port ID to flow rule matching data,
  so that returned data is always valid even if vport metadata matching is disabled.
  Also adds detection of vport matching mode to HWS layer.
- Patch 4 - Adds support for REPRESENTED_PORT item in HWS layer
  whenever vport metadata matching mode is disabled.
  This involves correctly translating DPDK port index to "source vport".
- Patch 5 - Removes all validation checks from mlx5 PMD which prevented probing
  on devices with disabled vport metadata matching mode.
  Adjusts internal PMD logic to work with "source vport" whenever needed.

[1]: https://docs.kernel.org/networking/devlink/mlx5.html

Dariusz Sosnowski (5):
  common/mlx5: query vport VHCA ID
  net/mlx5: store port VHCA ID
  net/mlx5: return port info regardless of register mask
  net/mlx5/hws: add source vport match in HWS
  net/mlx5: allow legacy source vport match

 drivers/common/mlx5/linux/mlx5_glue.c |  4 ++
 drivers/common/mlx5/linux/mlx5_glue.h |  2 +
 drivers/net/mlx5/hws/mlx5dr_cmd.c     | 13 +++-
 drivers/net/mlx5/hws/mlx5dr_cmd.h     |  1 +
 drivers/net/mlx5/hws/mlx5dr_definer.c | 99 ++++++++++++++++++++++-----
 drivers/net/mlx5/hws/mlx5dr_definer.h |  2 +
 drivers/net/mlx5/hws/mlx5dr_table.c   |  6 ++
 drivers/net/mlx5/linux/mlx5_os.c      | 38 +++-------
 drivers/net/mlx5/mlx5.h               |  4 ++
 drivers/net/mlx5/mlx5_flow.h          |  3 +-
 drivers/net/mlx5/mlx5_flow_dv.c       |  3 +
 drivers/net/mlx5/mlx5_flow_hw.c       | 34 ++++-----
 12 files changed, 140 insertions(+), 69 deletions(-)

--
2.47.3



More information about the dev mailing list