From: Bing Zhao <bingz@nvidia.com>
To: Dariusz Sosnowski <dsosnowski@nvidia.com>,
Slava Ovsiienko <viacheslavo@nvidia.com>,
Ori Kam <orika@nvidia.com>, Suanming Mou <suanmingm@nvidia.com>,
Matan Azrad <matan@nvidia.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
"NBU-Contact-Thomas Monjalon (EXTERNAL)" <thomas@monjalon.net>,
Raslan Darawsheh <rasland@nvidia.com>
Subject: RE: [PATCH] net/mlx5: remove representor matching devarg
Date: Thu, 6 Nov 2025 07:31:03 +0000 [thread overview]
Message-ID: <IA4PR12MB9763C7AE9DEB41CE9796334AD0C2A@IA4PR12MB9763.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20251027193558.770297-1-dsosnowski@nvidia.com>
Hi,
> -----Original Message-----
> From: Dariusz Sosnowski <dsosnowski@nvidia.com>
> Sent: Tuesday, October 28, 2025 3:36 AM
> To: Slava Ovsiienko <viacheslavo@nvidia.com>; Bing Zhao
> <bingz@nvidia.com>; Ori Kam <orika@nvidia.com>; Suanming Mou
> <suanmingm@nvidia.com>; Matan Azrad <matan@nvidia.com>
> Cc: dev@dpdk.org; NBU-Contact-Thomas Monjalon (EXTERNAL)
> <thomas@monjalon.net>; Raslan Darawsheh <rasland@nvidia.com>
> Subject: [PATCH] net/mlx5: remove representor matching devarg
>
> As announced in 25.07 release deprecation notice [1], this patch removes
> repr_matching_en device argument from mlx5 driver.
>
> Applications which disabled this option were able to receive traffic from
> any physical port/VF/SF on any representor.
> Specifically, in most cases, this was used to process all traffic on
> representor which is a transfer proxy port.
> Similar behavior in mlx5 PMD can be achieved without the use of additional
> device arguments, by using RTE_FLOW_ACTION_TYPE_RSS flow action in
> transfer flow rules.
>
> [1] https://doc.dpdk.org/guides-25.07/rel_notes/deprecation.html
>
> Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
> ---
> doc/guides/nics/mlx5.rst | 26 +--
> doc/guides/rel_notes/deprecation.rst | 11 -
> doc/guides/rel_notes/release_25_11.rst | 8 +
> drivers/net/mlx5/linux/mlx5_os.c | 16 --
> drivers/net/mlx5/mlx5.c | 13 --
> drivers/net/mlx5/mlx5.h | 1 -
> drivers/net/mlx5/mlx5_flow.c | 5 +-
> drivers/net/mlx5/mlx5_flow.h | 4 -
> drivers/net/mlx5/mlx5_flow_hw.c | 266 +------------------------
> drivers/net/mlx5/mlx5_trigger.c | 20 +-
> drivers/net/mlx5/mlx5_txq.c | 3 +-
> 11 files changed, 19 insertions(+), 354 deletions(-)
>
> diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index
> 20056f61d6..d248f5a6c3 100644
> --- a/doc/guides/nics/mlx5.rst
> +++ b/doc/guides/nics/mlx5.rst
> @@ -744,24 +744,6 @@ for an additional list of options shared with other
> mlx5 drivers.
>
> <Primary_PCI_BDF>,representor=pf[0,1]vf[0-2]
>
> -- ``repr_matching_en`` parameter [int]
> -
> - - 0. If representor matching is disabled, then there will be no
> implicit
> - item added. As a result, ingress flow rules will match traffic
> - coming to any port, not only the port on which flow rule is created.
> - Because of that, default flow rules for ingress traffic cannot be
> created
> - and port starts in isolated mode by default. Port cannot be switched
> back
> - to non-isolated mode.
> -
> - - 1. If representor matching is enabled (default setting),
> - then each ingress pattern template has an implicit REPRESENTED_PORT
> - item added. Flow rules based on this pattern template will match
> - the vport associated with port on which rule is created.
> -
> - .. note::
> -
> - This parameter is deprecated and will be removed in future releases.
> -
> - ``max_dump_files_num`` parameter [int]
>
> The maximum number of files per PMD entity that may be created for
> debug information.
> @@ -2342,7 +2324,6 @@ Runtime configuration
>
> The behaviour of port representors is configured with
> some :ref:`parameters <mlx5_representor_params>`.
> -The option ``repr_matching_en`` has an impact on flow steering.
>
> Limitations
> ^^^^^^^^^^^
> @@ -2352,9 +2333,6 @@ Limitations
> #. A driver limitation for ``RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR``
> action
> restricts the ``port_id`` configuration to only accept the value
> ``0xffff``,
> indicating the E-Switch manager.
> - If the ``repr_matching_en`` parameter is enabled, the traffic will be
> directed
> - to the representor of the source virtual port (SF/VF), while if it is
> disabled,
> - the traffic will be routed based on the steering rules in the ingress
> domain.
>
> Examples
> ^^^^^^^^
> @@ -3183,8 +3161,8 @@ Limitations
>
> #. Only single item is supported per pattern template.
>
> -#. In switch mode, when ``repr_matching_en`` is enabled (default
> setting),
> - matching ``RTE_FLOW_ITEM_TYPE_COMPARE`` is not supported for
> ``ingress`` rules.
> +#. In switch mode, ``RTE_FLOW_ITEM_TYPE_COMPARE`` flow item
> + is not supported for ``ingress`` rules.
> This is because an implicit ``RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT``
> needs to be added to the matcher,
> which conflicts with the single item limitation.
> diff --git a/doc/guides/rel_notes/deprecation.rst
> b/doc/guides/rel_notes/deprecation.rst
> index 1e60ac4e82..8653d6ca03 100644
> --- a/doc/guides/rel_notes/deprecation.rst
> +++ b/doc/guides/rel_notes/deprecation.rst
> @@ -147,14 +147,3 @@ Deprecation Notices
> This change will not result in any feature loss,
> as the fallback scalar paths which have feature parity with SSE
> will be used in the cases where the SSE paths would have been used.
> -
> -* net/mlx5: ``repr_matching_en`` device argument is deprecated
> - and will be removed in DPDK 25.11 release.
> - With disabled representor matching, behavior of Rx datapath in mlx5 PMD
> - is incompatible with current DPDK representor model.
> - Packets from any E-Switch port can arrive on any representor,
> - depending only on created flow rules.
> - Such working model should be exposed directly in DPDK ethdev API,
> - without relying on flow API.
> - Currently there is no alternative API
> - providing the same functionality as with ``repr_matching_en`` set to 0.
> diff --git a/doc/guides/rel_notes/release_25_11.rst
> b/doc/guides/rel_notes/release_25_11.rst
> index c5ba335cfc..ce2d72a411 100644
> --- a/doc/guides/rel_notes/release_25_11.rst
> +++ b/doc/guides/rel_notes/release_25_11.rst
> @@ -197,6 +197,14 @@ Removed Items
> the functions ``rte_tel_data_add_array_u64`` and
> ``rte_tel_data_add_dict_u64`` are removed.
> They are replaced by ``rte_tel_data_add_array_uint`` and
> ``rte_tel_data_add_dict_uint`` respectively.
>
> +* net/mlx5: ``repr_matching_en`` device argument has been removed.
> + Applications which disabled this option were able to receive traffic
> + from any physical port/VF/SF on any representor.
> + Specifically, in most cases, this was used to process all traffic on
> +representor
> + which is a transfer proxy port.
> + Similar behavior in mlx5 PMD can be achieved without the use of
> +additional device arguments,
> + by using ``RTE_FLOW_ACTION_TYPE_RSS`` flow action in transfer flow
> rules.
> +
>
> API Changes
> -----------
> diff --git a/drivers/net/mlx5/linux/mlx5_os.c
> b/drivers/net/mlx5/linux/mlx5_os.c
> index 8d11b1ac3a..83d3051fb8 100644
> --- a/drivers/net/mlx5/linux/mlx5_os.c
> +++ b/drivers/net/mlx5/linux/mlx5_os.c
> @@ -1777,22 +1777,6 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
> err = EINVAL;
> goto error;
> }
> - /*
> - * If representor matching is disabled, PMD cannot create
> default flow rules
> - * to receive traffic for all ports, since implicit source
> port match is not added.
> - * Isolated mode is forced.
> - */
> - if (priv->sh->config.dv_esw_en && !priv->sh-
> >config.repr_matching) {
> - err = mlx5_flow_isolate(eth_dev, 1, NULL);
> - if (err < 0) {
> - err = -err;
> - goto error;
> - }
> - DRV_LOG(WARNING, "port %u ingress traffic is restricted
> to defined "
> - "flow rules (isolated mode) since
> representor "
> - "matching is disabled",
> - eth_dev->data->port_id);
> - }
> eth_dev->data->dev_flags |= RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE;
> return eth_dev;
> #else
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> b018a4f0e2..0504fc2366 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -182,9 +182,6 @@
> /* HW steering counter's query interval. */ #define
> MLX5_HWS_CNT_CYCLE_TIME "svc_cycle_time"
>
> -/* Device parameter to control representor matching in ingress/egress
> flows with HWS. */ -#define MLX5_REPR_MATCHING_EN "repr_matching_en"
> -
> /*
> * Alignment of the Tx queue starting address,
> * If not set, using separate umem and MR for each TxQ.
> @@ -1435,8 +1432,6 @@ mlx5_dev_args_check_handler(const char *key, const
> char *val, void *opaque)
> config->cnt_svc.service_core = tmp;
> } else if (strcmp(MLX5_HWS_CNT_CYCLE_TIME, key) == 0) {
> config->cnt_svc.cycle_time = tmp;
> - } else if (strcmp(MLX5_REPR_MATCHING_EN, key) == 0) {
> - config->repr_matching = !!tmp;
> } else if (strcmp(MLX5_TXQ_MEM_ALGN, key) == 0) {
> config->txq_mem_algn = (uint32_t)tmp;
> }
> @@ -1477,7 +1472,6 @@ mlx5_shared_dev_ctx_args_config(struct
> mlx5_dev_ctx_shared *sh,
> MLX5_FDB_DEFAULT_RULE_EN,
> MLX5_HWS_CNT_SERVICE_CORE,
> MLX5_HWS_CNT_CYCLE_TIME,
> - MLX5_REPR_MATCHING_EN,
> MLX5_TXQ_MEM_ALGN,
> NULL,
> };
> @@ -1500,7 +1494,6 @@ mlx5_shared_dev_ctx_args_config(struct
> mlx5_dev_ctx_shared *sh,
> config->fdb_def_rule = 1;
> config->cnt_svc.cycle_time = MLX5_CNT_SVC_CYCLE_TIME_DEFAULT;
> config->cnt_svc.service_core = rte_get_main_lcore();
> - config->repr_matching = 1;
> config->txq_mem_algn = log2above(alignment);
> if (mkvlist != NULL) {
> /* Process parameters. */
> @@ -1535,11 +1528,6 @@ mlx5_shared_dev_ctx_args_config(struct
> mlx5_dev_ctx_shared *sh,
> config->dv_xmeta_en);
> config->dv_xmeta_en = MLX5_XMETA_MODE_LEGACY;
> }
> - if (config->dv_flow_en != 2 && !config->repr_matching) {
> - DRV_LOG(DEBUG, "Disabling representor matching is valid only "
> - "when HW Steering is enabled.");
> - config->repr_matching = 1;
> - }
> if (config->tx_pp && !sh->dev_cap.txpp_en) {
> DRV_LOG(ERR, "Packet pacing is not supported.");
> rte_errno = ENODEV;
> @@ -1594,7 +1582,6 @@ mlx5_shared_dev_ctx_args_config(struct
> mlx5_dev_ctx_shared *sh,
> DRV_LOG(DEBUG, "\"allow_duplicate_pattern\" is %u.",
> config->allow_duplicate_pattern);
> DRV_LOG(DEBUG, "\"fdb_def_rule_en\" is %u.", config->fdb_def_rule);
> - DRV_LOG(DEBUG, "\"repr_matching_en\" is %u.", config-
> >repr_matching);
> DRV_LOG(DEBUG, "\"txq_mem_algn\" is %u.", config->txq_mem_algn);
> return 0;
> }
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index
> 07418b0922..44ceb76c08 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -397,7 +397,6 @@ struct mlx5_sh_config {
> uint32_t lro_allowed:1; /* Whether LRO is allowed. */
> /* Allow/Prevent the duplicate rules pattern. */
> uint32_t fdb_def_rule:1; /* Create FDB default jump rule */
> - uint32_t repr_matching:1; /* Enable implicit vport matching in HWS
> FDB. */
> uint32_t txq_mem_algn; /* logarithm value of the TxQ address
> alignment. */
> struct {
> uint16_t service_core;
> diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
> index 1de398982a..a612f1f7cf 100644
> --- a/drivers/net/mlx5/mlx5_flow.c
> +++ b/drivers/net/mlx5/mlx5_flow.c
> @@ -8793,10 +8793,7 @@ mlx5_flow_isolate(struct rte_eth_dev *dev,
> "port must be stopped first");
> return -rte_errno;
> }
> - if (!enable && !priv->sh->config.repr_matching)
> - return rte_flow_error_set(error, ENOTSUP,
> RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
> - "isolated mode cannot be disabled when "
> - "representor matching is disabled");
> +
> priv->isolated = !!enable;
> if (enable)
> dev->dev_ops = &mlx5_dev_ops_isolate; diff --git
> a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index
> ff61706054..9bca014fc6 100644
> --- a/drivers/net/mlx5/mlx5_flow.h
> +++ b/drivers/net/mlx5/mlx5_flow.h
> @@ -3007,9 +3007,6 @@ struct mlx5_flow_hw_ctrl_fdb {
> struct rte_flow_pattern_template *port_items_tmpl;
> struct rte_flow_actions_template *jump_one_actions_tmpl;
> struct rte_flow_template_table *hw_esw_zero_tbl;
> - struct rte_flow_pattern_template *tx_meta_items_tmpl;
> - struct rte_flow_actions_template *tx_meta_actions_tmpl;
> - struct rte_flow_template_table *hw_tx_meta_cpy_tbl;
> struct rte_flow_pattern_template *lacp_rx_items_tmpl;
> struct rte_flow_actions_template *lacp_rx_actions_tmpl;
> struct rte_flow_template_table *hw_lacp_rx_tbl; @@ -3582,7 +3579,6
> @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev, int
> mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev,
> uint32_t sqn);
> int mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev); -
> int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev
> *dev); int mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev,
> uint32_t sqn, bool external); int mlx5_flow_hw_lacp_rx_flow(struct
> rte_eth_dev *dev); int mlx5_flow_actions_validate(struct rte_eth_dev
> *dev, diff --git a/drivers/net/mlx5/mlx5_flow_hw.c
> b/drivers/net/mlx5/mlx5_flow_hw.c index 491a78a0de..f5f73b38cd 100644
> --- a/drivers/net/mlx5/mlx5_flow_hw.c
> +++ b/drivers/net/mlx5/mlx5_flow_hw.c
> @@ -5305,7 +5305,7 @@ __translate_group(struct rte_eth_dev *dev,
> "group index not supported");
> *table_group = group + 1;
> } else if (config->dv_esw_en &&
> - (config->repr_matching || config->dv_xmeta_en ==
> MLX5_XMETA_MODE_META32_HWS) &&
> + config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
> external &&
> flow_attr->egress) {
> /*
> @@ -8549,7 +8549,7 @@ __flow_hw_pattern_validate(struct rte_eth_dev *dev,
> break;
> }
> case RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT:
> - if (attr->ingress && priv->sh->config.repr_matching)
> + if (attr->ingress)
> return rte_flow_error_set(error, EINVAL,
> RTE_FLOW_ERROR_TYPE_ITEM, NULL,
> "represented port item cannot be
> used"
> @@ -9024,14 +9024,12 @@ flow_hw_pattern_template_create(struct rte_eth_dev
> *dev,
> return NULL;
> orig_item_nb = rc;
> if (priv->sh->config.dv_esw_en &&
> - priv->sh->config.repr_matching &&
> attr->ingress && !attr->egress && !attr->transfer) {
> copied_items = flow_hw_prepend_item(items, orig_item_nb,
> &port, error);
> if (!copied_items)
> return NULL;
> tmpl_items = copied_items;
> } else if (priv->sh->config.dv_esw_en &&
> - priv->sh->config.repr_matching &&
> !attr->ingress && attr->egress && !attr->transfer) {
> if (item_flags & MLX5_FLOW_ITEM_SQ) {
> DRV_LOG(DEBUG, "Port %u omitting implicit REG_C_0 match
> for egress "
> @@ -9979,7 +9977,6 @@ flow_hw_setup_tx_repr_tagging(struct rte_eth_dev
> *dev, struct rte_flow_error *er
> };
>
> MLX5_ASSERT(priv->sh->config.dv_esw_en);
> - MLX5_ASSERT(priv->sh->config.repr_matching);
> priv->hw_tx_repr_tagging_pt =
> flow_hw_create_tx_repr_sq_pattern_tmpl(dev, error);
> if (!priv->hw_tx_repr_tagging_pt)
> @@ -10158,46 +10155,6 @@ flow_hw_create_ctrl_port_pattern_template(struct
> rte_eth_dev *dev,
> return flow_hw_pattern_template_create(dev, &attr, items, error); }
>
> -/*
> - * Creating a flow pattern template with all ETH packets matching.
> - * This template is used to set up a table for default Tx copy (Tx
> metadata
> - * to REG_C_1) flow rule usage.
> - *
> - * @param dev
> - * Pointer to Ethernet device.
> - * @param error
> - * Pointer to error structure.
> - *
> - * @return
> - * Pointer to flow pattern template on success, NULL otherwise.
> - */
> -static struct rte_flow_pattern_template * -
> flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev
> *dev,
> - struct rte_flow_error *error)
> -{
> - struct rte_flow_pattern_template_attr tx_pa_attr = {
> - .relaxed_matching = 0,
> - .egress = 1,
> - };
> - struct rte_flow_item_eth promisc = {
> - .hdr.dst_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00 },
> - .hdr.src_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00 },
> - .hdr.ether_type = 0,
> - };
> - struct rte_flow_item eth_all[] = {
> - [0] = {
> - .type = RTE_FLOW_ITEM_TYPE_ETH,
> - .spec = &promisc,
> - .mask = &promisc,
> - },
> - [1] = {
> - .type = RTE_FLOW_ITEM_TYPE_END,
> - },
> - };
> -
> - return flow_hw_pattern_template_create(dev, &tx_pa_attr, eth_all,
> error);
> -}
> -
> /*
> * Creating a flow pattern template with all LACP packets matching, only
> for NIC
> * ingress domain.
> @@ -10419,90 +10376,6 @@ flow_hw_create_ctrl_port_actions_template(struct
> rte_eth_dev *dev,
> return flow_hw_actions_template_create(dev, &attr, actions_v,
> actions_m, error); }
>
> -/*
> - * Creating an actions template to use header modify action for register
> - * copying. This template is used to set up a table for copy flow.
> - *
> - * @param dev
> - * Pointer to Ethernet device.
> - * @param error
> - * Pointer to error structure.
> - *
> - * @return
> - * Pointer to flow actions template on success, NULL otherwise.
> - */
> -static struct rte_flow_actions_template * -
> flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev
> *dev,
> - struct rte_flow_error *error)
> -{
> - struct rte_flow_actions_template_attr tx_act_attr = {
> - .egress = 1,
> - };
> - const struct rte_flow_action_modify_field mreg_action = {
> - .operation = RTE_FLOW_MODIFY_SET,
> - .dst = {
> - .field = (enum
> rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG,
> - .tag_index = REG_C_1,
> - },
> - .src = {
> - .field = (enum
> rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG,
> - .tag_index = REG_A,
> - },
> - .width = 32,
> - };
> - const struct rte_flow_action_modify_field mreg_mask = {
> - .operation = RTE_FLOW_MODIFY_SET,
> - .dst = {
> - .field = (enum
> rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG,
> - .level = UINT8_MAX,
> - .tag_index = UINT8_MAX,
> - .offset = UINT32_MAX,
> - },
> - .src = {
> - .field = (enum
> rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG,
> - .level = UINT8_MAX,
> - .tag_index = UINT8_MAX,
> - .offset = UINT32_MAX,
> - },
> - .width = UINT32_MAX,
> - };
> - const struct rte_flow_action_jump jump_action = {
> - .group = 1,
> - };
> - const struct rte_flow_action_jump jump_mask = {
> - .group = UINT32_MAX,
> - };
> - const struct rte_flow_action actions[] = {
> - [0] = {
> - .type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
> - .conf = &mreg_action,
> - },
> - [1] = {
> - .type = RTE_FLOW_ACTION_TYPE_JUMP,
> - .conf = &jump_action,
> - },
> - [2] = {
> - .type = RTE_FLOW_ACTION_TYPE_END,
> - },
> - };
> - const struct rte_flow_action masks[] = {
> - [0] = {
> - .type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
> - .conf = &mreg_mask,
> - },
> - [1] = {
> - .type = RTE_FLOW_ACTION_TYPE_JUMP,
> - .conf = &jump_mask,
> - },
> - [2] = {
> - .type = RTE_FLOW_ACTION_TYPE_END,
> - },
> - };
> -
> - return flow_hw_actions_template_create(dev, &tx_act_attr, actions,
> - masks, error);
> -}
> -
> /*
> * Creating an actions template to use default miss to re-route packets
> to the
> * kernel driver stack.
> @@ -10616,43 +10489,6 @@ flow_hw_create_ctrl_sq_miss_table(struct
> rte_eth_dev *dev,
> return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, error); }
>
> -/*
> - * Creating the default Tx metadata copy table on NIC Tx group 0.
> - *
> - * @param dev
> - * Pointer to Ethernet device.
> - * @param pt
> - * Pointer to flow pattern template.
> - * @param at
> - * Pointer to flow actions template.
> - * @param error
> - * Pointer to error structure.
> - *
> - * @return
> - * Pointer to flow table on success, NULL otherwise.
> - */
> -static struct rte_flow_template_table*
> -flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
> - struct rte_flow_pattern_template *pt,
> - struct rte_flow_actions_template *at,
> - struct rte_flow_error *error)
> -{
> - struct rte_flow_template_table_attr tx_tbl_attr = {
> - .flow_attr = {
> - .group = 0, /* Root */
> - .priority = MLX5_HW_LOWEST_PRIO_ROOT,
> - .egress = 1,
> - },
> - .nb_flows = 1, /* One default flow rule for all. */
> - };
> - struct mlx5_flow_template_table_cfg tx_tbl_cfg = {
> - .attr = tx_tbl_attr,
> - .external = false,
> - };
> -
> - return flow_hw_table_create(dev, &tx_tbl_cfg, &pt, 1, &at, 1,
> error);
> -}
> -
> /**
> * Creates a control flow table used to transfer traffic
> * from group 0 to group 1.
> @@ -10718,15 +10554,6 @@ flow_hw_cleanup_ctrl_fdb_tables(struct
> rte_eth_dev *dev)
> if (hw_ctrl_fdb->lacp_rx_items_tmpl)
> claim_zero(flow_hw_pattern_template_destroy(dev, hw_ctrl_fdb-
> >lacp_rx_items_tmpl,
> NULL));
> - /* Clean up templates used for default Tx metadata copy. */
> - if (hw_ctrl_fdb->hw_tx_meta_cpy_tbl)
> - claim_zero(flow_hw_table_destroy(dev, hw_ctrl_fdb-
> >hw_tx_meta_cpy_tbl, NULL));
> - if (hw_ctrl_fdb->tx_meta_actions_tmpl)
> - claim_zero(flow_hw_actions_template_destroy(dev, hw_ctrl_fdb-
> >tx_meta_actions_tmpl,
> - NULL));
> - if (hw_ctrl_fdb->tx_meta_items_tmpl)
> - claim_zero(flow_hw_pattern_template_destroy(dev, hw_ctrl_fdb-
> >tx_meta_items_tmpl,
> - NULL));
> /* Clean up templates used for default FDB jump rule. */
> if (hw_ctrl_fdb->hw_esw_zero_tbl)
> claim_zero(flow_hw_table_destroy(dev, hw_ctrl_fdb-
> >hw_esw_zero_tbl, NULL)); @@ -10813,8 +10640,6 @@
> flow_hw_create_ctrl_tables(struct rte_eth_dev *dev, struct rte_flow_error
> *error {
> struct mlx5_priv *priv = dev->data->dev_private;
> struct mlx5_flow_hw_ctrl_fdb *hw_ctrl_fdb;
> - uint32_t xmeta = priv->sh->config.dv_xmeta_en;
> - uint32_t repr_matching = priv->sh->config.repr_matching;
> uint32_t fdb_def_rule = priv->sh->config.fdb_def_rule;
>
> MLX5_ASSERT(priv->hw_ctrl_fdb == NULL); @@ -10900,32 +10725,6 @@
> flow_hw_create_ctrl_tables(struct rte_eth_dev *dev, struct rte_flow_error
> *error
> goto err;
> }
> }
> - /* Create templates and table for default Tx metadata copy flow
> rule. */
> - if (!repr_matching && xmeta == MLX5_XMETA_MODE_META32_HWS) {
> - hw_ctrl_fdb->tx_meta_items_tmpl =
> -
> flow_hw_create_tx_default_mreg_copy_pattern_template(dev, error);
> - if (!hw_ctrl_fdb->tx_meta_items_tmpl) {
> - DRV_LOG(ERR, "port %u failed to Tx metadata copy
> pattern"
> - " template for control flows", dev->data-
> >port_id);
> - goto err;
> - }
> - hw_ctrl_fdb->tx_meta_actions_tmpl =
> -
> flow_hw_create_tx_default_mreg_copy_actions_template(dev, error);
> - if (!hw_ctrl_fdb->tx_meta_actions_tmpl) {
> - DRV_LOG(ERR, "port %u failed to Tx metadata copy
> actions"
> - " template for control flows", dev->data-
> >port_id);
> - goto err;
> - }
> - hw_ctrl_fdb->hw_tx_meta_cpy_tbl =
> - flow_hw_create_tx_default_mreg_copy_table
> - (dev, hw_ctrl_fdb->tx_meta_items_tmpl,
> - hw_ctrl_fdb->tx_meta_actions_tmpl, error);
> - if (!hw_ctrl_fdb->hw_tx_meta_cpy_tbl) {
> - DRV_LOG(ERR, "port %u failed to create table for
> default"
> - " Tx metadata copy flow rule", dev->data-
> >port_id);
> - goto err;
> - }
> - }
> /* Create LACP default miss table. */
> if (!priv->sh->config.lacp_by_user && priv->pf_bond >= 0 && priv-
> >master) {
> hw_ctrl_fdb->lacp_rx_items_tmpl =
> @@ -12105,7 +11904,7 @@ __flow_hw_configure(struct rte_eth_dev *dev,
> if (!priv->hw_tag[i])
> goto err;
> }
> - if (priv->sh->config.dv_esw_en && priv->sh->config.repr_matching) {
> + if (priv->sh->config.dv_esw_en) {
> ret = flow_hw_setup_tx_repr_tagging(dev, error);
> if (ret)
> goto err;
> @@ -16003,63 +15802,6 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct
> rte_eth_dev *dev)
> items, 0, actions, 0, &flow_info, false); }
>
> -int
> -mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) -{
> - struct mlx5_priv *priv = dev->data->dev_private;
> - struct rte_flow_item_eth promisc = {
> - .hdr.dst_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00 },
> - .hdr.src_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00 },
> - .hdr.ether_type = 0,
> - };
> - struct rte_flow_item eth_all[] = {
> - [0] = {
> - .type = RTE_FLOW_ITEM_TYPE_ETH,
> - .spec = &promisc,
> - .mask = &promisc,
> - },
> - [1] = {
> - .type = RTE_FLOW_ITEM_TYPE_END,
> - },
> - };
> - struct rte_flow_action_modify_field mreg_action = {
> - .operation = RTE_FLOW_MODIFY_SET,
> - .dst = {
> - .field = (enum
> rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG,
> - .tag_index = REG_C_1,
> - },
> - .src = {
> - .field = (enum
> rte_flow_field_id)MLX5_RTE_FLOW_FIELD_META_REG,
> - .tag_index = REG_A,
> - },
> - .width = 32,
> - };
> - struct rte_flow_action copy_reg_action[] = {
> - [0] = {
> - .type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
> - .conf = &mreg_action,
> - },
> - [1] = {
> - .type = RTE_FLOW_ACTION_TYPE_JUMP,
> - },
> - [2] = {
> - .type = RTE_FLOW_ACTION_TYPE_END,
> - },
> - };
> - struct mlx5_ctrl_flow_info flow_info = {
> - .type = MLX5_CTRL_FLOW_TYPE_TX_META_COPY,
> - };
> -
> - MLX5_ASSERT(priv->master);
> - if (!priv->dr_ctx ||
> - !priv->hw_ctrl_fdb ||
> - !priv->hw_ctrl_fdb->hw_tx_meta_cpy_tbl)
> - return 0;
> - return flow_hw_create_ctrl_flow(dev, dev,
> - priv->hw_ctrl_fdb->hw_tx_meta_cpy_tbl,
> - eth_all, 0, copy_reg_action, 0, &flow_info,
> false);
> -}
> -
> int
> mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn,
> bool external) { @@ -16091,8 +15833,6 @@
> mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn,
> bool e
> .tx_repr_sq = sqn,
> };
>
> - /* It is assumed that caller checked for representor matching. */
> - MLX5_ASSERT(priv->sh->config.repr_matching);
> if (!priv->dr_ctx) {
> DRV_LOG(DEBUG, "Port %u must be configured for HWS, before
> creating "
> "default egress flow rules. Omitting creation.",
> diff --git a/drivers/net/mlx5/mlx5_trigger.c
> b/drivers/net/mlx5/mlx5_trigger.c index 916ac03c16..343fb844ad 100644
> --- a/drivers/net/mlx5/mlx5_trigger.c
> +++ b/drivers/net/mlx5/mlx5_trigger.c
> @@ -1132,9 +1132,9 @@ mlx5_hw_representor_port_allowed_start(struct
> rte_eth_dev *dev)
> rte_errno = EAGAIN;
> return -rte_errno;
> }
> - if (priv->sh->config.repr_matching && !priv->dr_ctx) {
> - DRV_LOG(ERR, "Failed to start port %u: with representor
> matching enabled, port "
> - "must be configured for HWS", dev->data->port_id);
> + if (priv->dr_ctx == NULL) {
> + DRV_LOG(ERR, "Failed to start port %u: port must be configured
> for HWS",
> + dev->data->port_id);
> rte_errno = EINVAL;
> return -rte_errno;
> }
> @@ -1606,18 +1606,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
> unsigned int i;
> int ret;
>
> - /*
> - * With extended metadata enabled, the Tx metadata copy is handled
> by default
> - * Tx tagging flow rules, so default Tx flow rule is not needed. It
> is only
> - * required when representor matching is disabled.
> - */
> - if (config->dv_esw_en &&
> - !config->repr_matching &&
> - config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
> - priv->master) {
> - if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev))
> - goto error;
> - }
> for (i = 0; i < priv->txqs_n; ++i) {
> struct mlx5_txq_ctrl *txq = mlx5_txq_get(dev, i);
> uint32_t queue;
> @@ -1633,7 +1621,7 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
> goto error;
> }
> }
> - if (config->dv_esw_en && config->repr_matching) {
> + if (config->dv_esw_en) {
> if (mlx5_flow_hw_tx_repr_matching_flow(dev, queue,
> false)) {
> mlx5_txq_release(dev, i);
> goto error;
> diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
> index b090d8274d..cd831f9728 100644
> --- a/drivers/net/mlx5/mlx5_txq.c
> +++ b/drivers/net/mlx5/mlx5_txq.c
> @@ -1453,8 +1453,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id,
> uint32_t sq_num)
> sq_miss_created = true;
> }
>
> - if (priv->sh->config.repr_matching &&
> - mlx5_flow_hw_tx_repr_matching_flow(dev, sq_num, true)) {
> + if (mlx5_flow_hw_tx_repr_matching_flow(dev, sq_num, true)) {
> if (sq_miss_created)
> mlx5_flow_hw_esw_destroy_sq_miss_flow(dev,
> sq_num);
> return -rte_errno;
> --
> 2.39.5
Acked-by: Bing Zhao <bingz@nvidia.com>
prev parent reply other threads:[~2025-11-06 7:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-27 19:35 Dariusz Sosnowski
2025-11-06 7:31 ` Bing Zhao [this message]
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=IA4PR12MB9763C7AE9DEB41CE9796334AD0C2A@IA4PR12MB9763.namprd12.prod.outlook.com \
--to=bingz@nvidia.com \
--cc=dev@dpdk.org \
--cc=dsosnowski@nvidia.com \
--cc=matan@nvidia.com \
--cc=orika@nvidia.com \
--cc=rasland@nvidia.com \
--cc=suanmingm@nvidia.com \
--cc=thomas@monjalon.net \
--cc=viacheslavo@nvidia.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).