The series should be reverted, the series is handling untrusted VF's/SF's same as CX9, Using HWS engine and causing a degradation (failed to probe 1K SF's cause memzone segments exceeds maximum 2560).
Regards, Maayan Kashani > -----Original Message----- > From: Maayan Kashani <[email protected]> > Sent: Monday, 24 November 2025 10:30 > To: [email protected] > Cc: Raslan Darawsheh <[email protected]>; Dariusz Sosnowski > <[email protected]>; Slava Ovsiienko <[email protected]>; Bing > Zhao <[email protected]>; Ori Kam <[email protected]>; Suanming Mou > <[email protected]>; Matan Azrad <[email protected]> > Subject: RE: [PATCH 2/2] net/mlx5: update flow devarg handling for future > HW > > External email: Use caution opening links or attachments > > > Hi, > Please revert this series. > > Regards, > Maayan Kashani > > > -----Original Message----- > > From: Maayan Kashani <[email protected]> > > Sent: Thursday, 6 November 2025 10:38 > > To: [email protected] > > Cc: Maayan Kashani <[email protected]>; Raslan Darawsheh > > <[email protected]>; Dariusz Sosnowski <[email protected]>; > Slava > > Ovsiienko <[email protected]>; Bing Zhao <[email protected]>; Ori > > Kam <[email protected]>; Suanming Mou <[email protected]>; > Matan > > Azrad <[email protected]> > > Subject: [PATCH 2/2] net/mlx5: update flow devarg handling for future > > HW > > > > SWS (software steering) will be disabled on future hardware generations. > > Update the defaults for the dv_flow_en and allow_duplicate_pattern > > devargs accordingly. > > > > - Default dv_flow_en devarg value will be chosen based on whether > > NIC supports SW steering and/or HW steering. > > - If DV flow is not supported and allow_duplicate_pattern is > > set by the user, forcibly disable it and emit a clear log message. > > > > This change improves reliability by ensuring only valid configurations > > are applied, and provides clear feedback to the user when fallbacks > > are triggered. > > > > Signed-off-by: Maayan Kashani <[email protected]> > > Acked-by: Dariusz Sosnowski <[email protected]> > > --- > > doc/guides/nics/mlx5.rst | 11 +++++-- drivers/net/mlx5/mlx5.c | 71 > > ++++++++++++++++++++++++++++++++++++++- > > - > > 2 files changed, 77 insertions(+), 5 deletions(-) > > > > diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index > > 37495359d4f..91983089702 100644 > > --- a/doc/guides/nics/mlx5.rst > > +++ b/doc/guides/nics/mlx5.rst > > @@ -694,8 +694,11 @@ for an additional list of options shared with > > other > > mlx5 drivers. > > Value 2 enables the WQE based hardware steering. > > In this mode, only queue-based flow management is supported. > > > > - It is configured by default to 1 (DV flow steering) if supported. > > - Otherwise, the value is 0 which indicates legacy Verbs flow offloading. > > + By default, the PMD will set this value according to capability. > > + If DV flow steering is supported, it will be set to 1. > > + If DV flow steering is not supported and HW steering is supported, > > + then it will be set to 2. > > + Otherwise, it will be set to 0. > > > > - ``dv_esw_en`` parameter [int] > > > > @@ -838,8 +841,10 @@ for an additional list of options shared with > > other > > mlx5 drivers. > > - 1. Allow insertion of rules with the same pattern items. > > In this case, all rules are inserted but only the first rule takes > > effect, > > the next rule takes effect only if the previous rules are deleted. > > + This option is not supported in :ref:`HWS mode <mlx5_hws>`. > > + If this option is set to 1 in HWS mode, it will be set to 0. > > > > - By default, the PMD will set this value to 1. > > + By default, the PMD will set this value according to capability. > > > > > > .. _mlx5_net_stats: > > diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index > > ea235cf36be..dd3460f8d4b 100644 > > --- a/drivers/net/mlx5/mlx5.c > > +++ b/drivers/net/mlx5/mlx5.c > > @@ -1443,6 +1443,45 @@ mlx5_dev_args_check_handler(const char *key, > > const char *val, void *opaque) > > return 0; > > } > > > > +static bool > > +mlx5_hws_is_supported(struct mlx5_dev_ctx_shared *sh) { > > + return (sh->cdev->config.devx && > > + sh->cdev->config.hca_attr.wqe_based_flow_table_sup); > > +} > > + > > +static bool > > +mlx5_sws_is_any_supported(struct mlx5_dev_ctx_shared *sh) { > > + struct mlx5_common_device *cdev = sh->cdev; > > + struct mlx5_hca_attr *hca_attr = &cdev->config.hca_attr; > > + > > + if (hca_attr->rx_sw_owner_v2 || hca_attr->rx_sw_owner) > > + return true; > > + > > + if (hca_attr->tx_sw_owner_v2 || hca_attr->tx_sw_owner) > > + return true; > > + > > + if (hca_attr->eswitch_manager && (hca_attr->esw_sw_owner_v2 || > > hca_attr->esw_sw_owner)) > > + return true; > > + > > + return false; > > +} > > + > > +static bool > > +mlx5_kvargs_is_used(struct mlx5_kvargs_ctrl *mkvlist, const char > > +*key) { > > + const struct rte_kvargs_pair *pair; > > + uint32_t i; > > + > > + for (i = 0; i < mkvlist->kvlist->count; ++i) { > > + pair = &mkvlist->kvlist->pairs[i]; > > + if (strcmp(pair->key, key) == 0 && mkvlist->is_used[i]) > > + return true; > > + } > > + return false; > > +} > > + > > /** > > * Parse user device parameters and adjust them according to device > > * capabilities. > > @@ -1484,6 +1523,8 @@ mlx5_shared_dev_ctx_args_config(struct > > mlx5_dev_ctx_shared *sh, > > int ret = 0; > > size_t alignment = rte_mem_page_size(); > > uint32_t max_queue_umem_size = MLX5_WQE_SIZE * > > mlx5_dev_get_max_wq_size(sh); > > + bool hws_is_supported = mlx5_hws_is_supported(sh); > > + bool sws_is_supported = mlx5_sws_is_any_supported(sh); > > > > if (alignment == (size_t)-1) { > > alignment = (1 << MLX5_LOG_PAGE_SIZE); @@ -1494,9 > > +1535,15 @@ mlx5_shared_dev_ctx_args_config(struct > > mlx5_dev_ctx_shared *sh, > > memset(config, 0, sizeof(*config)); > > config->vf_nl_en = 1; > > config->dv_esw_en = 1; > > - config->dv_flow_en = 1; > > + if (!sws_is_supported && hws_is_supported) > > + config->dv_flow_en = 2; > > + else > > + config->dv_flow_en = 1; > > config->decap_en = 1; > > - config->allow_duplicate_pattern = 1; > > + if (config->dv_flow_en == 2) > > + config->allow_duplicate_pattern = 0; > > + else > > + config->allow_duplicate_pattern = 1; > > 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(); @@ -1517,6 > > +1564,26 @@ mlx5_shared_dev_ctx_args_config(struct > > mlx5_dev_ctx_shared *sh, > > DRV_LOG(WARNING, "DV flow is not supported."); > > config->dv_flow_en = 0; > > } > > + /* Inform user if DV flow is not supported. */ > > + if (config->dv_flow_en == 1 && !sws_is_supported && > > hws_is_supported) { > > + DRV_LOG(WARNING, "DV flow is not supported. Changing to > > HWS mode."); > > + config->dv_flow_en = 2; > > + } > > + /* Handle allow_duplicate_pattern based on final dv_flow_en mode. > > + * HWS mode (dv_flow_en=2) doesn't support duplicate patterns. > > + * Warn only if user explicitly requested an incompatible setting. > > + */ > > + bool allow_dup_pattern_set = mkvlist != NULL && > > + mlx5_kvargs_is_used(mkvlist, > > MLX5_ALLOW_DUPLICATE_PATTERN); > > + if (config->dv_flow_en == 2) { > > + if (config->allow_duplicate_pattern == 1 && > > allow_dup_pattern_set) > > + DRV_LOG(WARNING, "Duplicate pattern is not > > supported with HWS. Disabling it."); > > + config->allow_duplicate_pattern = 0; > > + } else if (!allow_dup_pattern_set) { > > + /* Non-HWS mode: set default to 1 only if not explicitly > > + set by > > user */ > > + config->allow_duplicate_pattern = 1; > > + } > > + > > if (config->dv_esw_en && !sh->dev_cap.dv_esw_en) { > > DRV_LOG(DEBUG, "E-Switch DV flow is not supported."); > > config->dv_esw_en = 0; > > -- > > 2.21.0

