net/mlx5: add HWS support for matching ingress metadata
PATCH 1/1 net/mlx5: add HWS support for matching ingress metadata
Add support for matching metadata in HWS ingress rules.
It using REG_B matching which is supported for each device supports HWS.
--- drivers/net/mlx5/hws/mlx5dr.h | 1 + drivers/net/mlx5/hws/mlx5dr_definer.c | 32 ++++++++++++++++++--------- drivers/net/mlx5/mlx5_flow.h | 16 ++++++++------ drivers/net/mlx5/mlx5_flow_dv.c | 19 ++++++++++------ drivers/net/mlx5/mlx5_flow_hw.c | 23 +++++++++---------- 5 files changed, 55 insertions(+), 36 deletions(-)
drivers/net/mlx5/hws/mlx5dr.h +1 -0
@@ -18,6 +18,7 @@ enum mlx5dr_table_type {MLX5DR_TABLE_TYPE_NIC_TX ,MLX5DR_TABLE_TYPE_FDB ,MLX5DR_TABLE_TYPE_MAX , + MLX5DR_TABLE_TYPE_DONTCARE = MLX5DR_TABLE_TYPE_MAX, }; enum mlx5dr_matcher_resource_mode {
drivers/net/mlx5/hws/mlx5dr_definer.c +22 -10
@@ -1741,6 +1741,7 @@ mlx5dr_definer_conv_item_tag(struct mlx5dr_definer_conv_data *cd,if (item->type ==RTE_FLOW_ITEM_TYPE_TAG ) reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , v->index);else reg = (int )v->index;
@@ -1801,9 +1802,10 @@ mlx5dr_definer_conv_item_quota(struct mlx5dr_definer_conv_data *cd, __rte_unused struct rte_flow_item *item, int item_idx) { - int mtr_reg = -flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_METER_COLOR , -0 ); + int mtr_reg = flow_hw_get_reg_id_from_ctx(cd->ctx, +RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE , +0 );struct mlx5dr_definer_fc *fc;if (mtr_reg <0 ) {
@@ -1822,6 +1824,7 @@ mlx5dr_definer_conv_item_quota(struct mlx5dr_definer_conv_data *cd,static int mlx5dr_definer_conv_item_metadata (struct mlx5dr_definer_conv_data *cd, +enum mlx5dr_table_type table_domain_type,struct rte_flow_item *item,int item_idx) {
@@ -1833,7 +1836,8 @@ mlx5dr_definer_conv_item_metadata(struct mlx5dr_definer_conv_data *cd,if (!m)return 0 ; - reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_META ,-1 ); + reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_META , + table_domain_type,-1 );if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for item metadata" ); rte_errno =EINVAL ;
@@ -2140,8 +2144,9 @@ mlx5dr_definer_conv_item_conntrack(struct mlx5dr_definer_conv_data *cd,if (!m)return 0 ; - reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_CONNTRACK , --1 ); + reg =flow_hw_get_reg_id_from_ctx (cd->ctx, +RTE_FLOW_ITEM_TYPE_CONNTRACK , +MLX5DR_TABLE_TYPE_DONTCARE ,-1 );if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for item conntrack" ); rte_errno =EINVAL ;
@@ -2283,7 +2288,8 @@ mlx5dr_definer_conv_item_meter_color(struct mlx5dr_definer_conv_data *cd,return 0 ; reg =flow_hw_get_reg_id_from_ctx (cd->ctx, -RTE_FLOW_ITEM_TYPE_METER_COLOR ,0 ); +RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE ,0 );MLX5_ASSERT (reg >0 ); fc =mlx5dr_definer_get_register_fc (cd, reg);
@@ -2878,6 +2884,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,const struct rte_flow_field_data *other_f, struct mlx5dr_definer_conv_data *cd, int item_idx, + enum mlx5dr_table_type table_domain_type, enum mlx5dr_definer_compare_dw_selectors dw_offset) { struct mlx5dr_definer_fc *fc = NULL;
@@ -2892,7 +2899,8 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,switch (f->field) {case RTE_FLOW_FIELD_META : reg =flow_hw_get_reg_id_from_ctx (cd->ctx, -RTE_FLOW_ITEM_TYPE_META ,-1 ); +RTE_FLOW_ITEM_TYPE_META , + table_domain_type,-1 );if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for compare metadata field" ); rte_errno =EINVAL ;
@@ -2911,6 +2919,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,case RTE_FLOW_FIELD_TAG : reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , f->tag_index);if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for compare tag field" );
@@ -2966,6 +2975,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,static int mlx5dr_definer_conv_item_compare (struct mlx5dr_definer_conv_data *cd, +enum mlx5dr_table_type table_domain_type,struct rte_flow_item *item,int item_idx) {
@@ -2982,11 +2992,13 @@ mlx5dr_definer_conv_item_compare(struct mlx5dr_definer_conv_data *cd, } ret =mlx5dr_definer_conv_item_compare_field (a, b, cd, item_idx, + table_domain_type,MLX5DR_DEFINER_COMPARE_ARGUMENT_0 );if (ret)return ret; ret =mlx5dr_definer_conv_item_compare_field (b,NULL , cd, item_idx, + table_domain_type,MLX5DR_DEFINER_COMPARE_BASE_0 );if (ret)return ret;
@@ -3082,7 +3094,7 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, item_flags |=MLX5_FLOW_ITEM_TAG ;break ;case RTE_FLOW_ITEM_TYPE_META : - ret =mlx5dr_definer_conv_item_metadata (&cd, items, i); + ret =mlx5dr_definer_conv_item_metadata (&cd, matcher->tbl->type, items, i); item_flags |=MLX5_FLOW_ITEM_METADATA ;break ;case RTE_FLOW_ITEM_TYPE_GRE :
@@ -3173,7 +3185,7 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx,DR_LOG (ERR ,"Compare matcher not supported for more than one item" ); goto not_supp; } - ret =mlx5dr_definer_conv_item_compare (&cd, items, i); + ret =mlx5dr_definer_conv_item_compare (&cd, matcher->tbl->type, items, i); item_flags |=MLX5_FLOW_ITEM_COMPARE ; matcher->flags |=MLX5DR_MATCHER_FLAGS_COMPARE ;break ;
drivers/net/mlx5/mlx5_flow.h +9 -7
@@ -1722,12 +1722,12 @@ flow_hw_get_wire_port(struct ibv_context *ibctx)/* * Convert metadata or tag to the actual register. -* META: Can only be used to match in the FDB in this stage, fixed C_1. +* META: Fixed C_1 for FDB mode, REG_A for NIC TX and REG_B for NIC RX. * TAG: C_x expect meter color reg and the reserved ones. */ static __rte_always_inline int -flow_hw_get_reg_id (struct rte_eth_dev *dev, -enum rte_flow_item_type type,uint32_t id) +flow_hw_get_reg_id (struct rte_eth_dev *dev,enum rte_flow_item_type type, +enum mlx5dr_table_type domain_type,uint32_t id) {struct mlx5_dev_ctx_shared *sh =MLX5_SH (dev);struct mlx5_dev_registers *reg = &sh->registers;
@@ -1747,8 +1747,10 @@ flow_hw_get_reg_id(struct rte_eth_dev *dev,* On non-root tables - REG_A corresponds to general_purpose_lookup_field, * which translates to REG_A in NIC TX and to REG_B in NIC RX. * However, current FW does not implement REG_B case right now, so -* REG_B case should be rejected on pattern template validation. +* REG_B case is return explicitly by this function for NIC RX. */ +if (domain_type ==MLX5DR_TABLE_TYPE_NIC_RX ) +return REG_B ;return REG_A ;case RTE_FLOW_ITEM_TYPE_CONNTRACK :case RTE_FLOW_ITEM_TYPE_METER_COLOR :
@@ -1764,8 +1766,8 @@ flow_hw_get_reg_id(struct rte_eth_dev *dev, } static __rte_always_inline int -flow_hw_get_reg_id_from_ctx (void *dr_ctx, -enum rte_flow_item_type type,uint32_t id) +flow_hw_get_reg_id_from_ctx (void *dr_ctx,enum rte_flow_item_type type, +enum mlx5dr_table_type domain_type,uint32_t id) {#ifdef HAVE_IBV_FLOW_DV_SUPPORT uint16_t port;
@@ -1776,7 +1778,7 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, priv = rte_eth_devices[port].data->dev_private;if (priv->dr_ctx == dr_ctx)return flow_hw_get_reg_id (&rte_eth_devices[port], - type, id); + type, domain_type, id); }#else RTE_SET_USED (dr_ctx);
drivers/net/mlx5/mlx5_flow_dv.c +12 -7
@@ -2089,6 +2089,7 @@ mlx5_flow_field_id_to_modify_infoif (priv->sh->config.dv_flow_en ==2 ) reg =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , tag_index);else reg = mlx5_flow_get_reg_id(dev, MLX5_APP_TAG,
@@ -2206,12 +2207,13 @@ mlx5_flow_field_id_to_modify_infoint reg;if (priv->sh->config.dv_flow_en ==2 ) - reg =flow_hw_get_reg_id - (dev, -RTE_FLOW_ITEM_TYPE_METER_COLOR ,0 ); + reg =flow_hw_get_reg_id (dev, +RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE , +0 );else reg =mlx5_flow_get_reg_id (dev,MLX5_MTR_COLOR , -0 , error); +0 , error);if (reg <0 )return ;MLX5_ASSERT (reg !=REG_NON );
@@ -10548,7 +10550,8 @@ flow_dv_translate_item_meta(struct rte_eth_dev *dev,if (!!(key_type &MLX5_SET_MATCHER_SW )) reg =flow_dv_get_metadata_reg (dev, attr,NULL );else - reg =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_META ,0 ); + reg =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_META , +MLX5DR_TABLE_TYPE_DONTCARE ,0 );if (reg <0 )return ;MLX5_ASSERT (reg !=REG_NON );
@@ -10651,7 +10654,8 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,if (!!(key_type &MLX5_SET_MATCHER_SW )) reg =mlx5_flow_get_reg_id (dev,MLX5_APP_TAG , index,NULL );else - reg =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , index); + reg =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , index);MLX5_ASSERT (reg >0 );flow_dv_match_meta_reg (key, (enum modify_reg )reg, tag_v->data, tag_m->data); }
@@ -11350,7 +11354,8 @@ flow_dv_translate_item_meter_color(struct rte_eth_dev *dev, void *key, reg =mlx5_flow_get_reg_id (dev,MLX5_MTR_COLOR ,0 ,NULL ); else reg =flow_hw_get_reg_id (dev, -RTE_FLOW_ITEM_TYPE_METER_COLOR ,0 ); +RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE ,0 );if (reg ==REG_NON )return ;flow_dv_match_meta_reg (key, (enum modify_reg )reg, value, mask);
drivers/net/mlx5/mlx5_flow_hw.c +11 -12
@@ -5221,9 +5221,13 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev,RTE_FLOW_ERROR_TYPE_ACTION , action, "tag index is out of range");if ((action_conf->dst.field ==RTE_FLOW_FIELD_TAG && -flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , action_conf->dst.tag_index) ==REG_NON ) || +flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , + action_conf->dst.tag_index) ==REG_NON ) || (action_conf->src.field ==RTE_FLOW_FIELD_TAG && -flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , action_conf->src.tag_index) ==REG_NON )) +flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , + action_conf->src.tag_index) ==REG_NON ))return rte_flow_error_set (error,EINVAL ,RTE_FLOW_ERROR_TYPE_ACTION , action,"tag index is out of range" );
@@ -7012,7 +7016,9 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev,RTE_FLOW_ERROR_TYPE_UNSPECIFIED ,NULL , "Invalid tag index"); - tag_idx =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , tag->index); + tag_idx =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , + tag->index);if (tag_idx ==REG_NON ) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
@@ -7058,20 +7064,13 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, " when egress attribute is set");break ;case RTE_FLOW_ITEM_TYPE_META : -if (!priv->sh->config.dv_esw_en || - priv->sh->config.dv_xmeta_en !=MLX5_XMETA_MODE_META32_HWS ) { -if (attr->ingress) -return rte_flow_error_set (error,EINVAL , -RTE_FLOW_ERROR_TYPE_ITEM ,NULL , -"META item is not supported" -" on current FW with ingress" -" attribute" ); - } +/* ingress + group 0 is not supported */ break ;case RTE_FLOW_ITEM_TYPE_METER_COLOR : {int reg =flow_hw_get_reg_id (dev,RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE ,0 );if (reg ==REG_NON ) return rte_flow_error_set(error, EINVAL,
Signature · 1 line
2.25.1
PATCH v2 1/1 net/mlx5: add HWS support for matching ingress metadata
Add support for matching metadata in HWS ingress rules.
It using REG_B matching which is supported for each device supports HWS.
---
v2:
- Rebase.
- Fix compilation issue.
- Update documentation.
doc/guides/nics/mlx5.rst | 3 +- drivers/net/mlx5/hws/mlx5dr.h | 1 + drivers/net/mlx5/hws/mlx5dr_definer.c | 32 ++++--- drivers/net/mlx5/mlx5_flow.h | 122 ++++++++++++++------------ drivers/net/mlx5/mlx5_flow_hw.c | 10 +-- 5 files changed, 92 insertions(+), 76 deletions(-)
doc/guides/nics/mlx5.rst +2 -1
@@ -1301,7 +1301,8 @@ for an additional list of options shared with other mlx5 drivers. ``META`` related actions and items operate only within NIC Tx and NIC Rx steering domains, no ``MARK`` and ``META`` information crosses the domain boundaries. The ``MARK`` item is 24 bits wide, the ``META`` - item is 32 bits wide and match supported on egress only. + item is 32 bits wide and match supported on egress only when + ``dv_flow_en`` = 1. - 1, this engages extensive metadata mode, the ``MARK`` and ``META`` related actions and items operate within all supported steering domains,
drivers/net/mlx5/hws/mlx5dr.h +1 -0
@@ -18,6 +18,7 @@ enum mlx5dr_table_type {MLX5DR_TABLE_TYPE_NIC_TX ,MLX5DR_TABLE_TYPE_FDB ,MLX5DR_TABLE_TYPE_MAX , + MLX5DR_TABLE_TYPE_DONTCARE = MLX5DR_TABLE_TYPE_MAX, }; enum mlx5dr_matcher_resource_mode {
drivers/net/mlx5/hws/mlx5dr_definer.c +22 -10
@@ -1745,6 +1745,7 @@ mlx5dr_definer_conv_item_tag(struct mlx5dr_definer_conv_data *cd,if (item->type ==RTE_FLOW_ITEM_TYPE_TAG ) reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , v->index);else reg = (int )v->index;
@@ -1805,9 +1806,10 @@ mlx5dr_definer_conv_item_quota(struct mlx5dr_definer_conv_data *cd, __rte_unused struct rte_flow_item *item, int item_idx) { - int mtr_reg = -flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_METER_COLOR , -0 ); + int mtr_reg = flow_hw_get_reg_id_from_ctx(cd->ctx, +RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE , +0 );struct mlx5dr_definer_fc *fc;if (mtr_reg <0 ) {
@@ -1826,6 +1828,7 @@ mlx5dr_definer_conv_item_quota(struct mlx5dr_definer_conv_data *cd,static int mlx5dr_definer_conv_item_metadata (struct mlx5dr_definer_conv_data *cd, +enum mlx5dr_table_type table_domain_type,struct rte_flow_item *item,int item_idx) {
@@ -1837,7 +1840,8 @@ mlx5dr_definer_conv_item_metadata(struct mlx5dr_definer_conv_data *cd,if (!m)return 0 ; - reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_META ,-1 ); + reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_META , + table_domain_type,-1 );if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for item metadata" ); rte_errno =EINVAL ;
@@ -2144,8 +2148,9 @@ mlx5dr_definer_conv_item_conntrack(struct mlx5dr_definer_conv_data *cd,if (!m)return 0 ; - reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_CONNTRACK , --1 ); + reg =flow_hw_get_reg_id_from_ctx (cd->ctx, +RTE_FLOW_ITEM_TYPE_CONNTRACK , +MLX5DR_TABLE_TYPE_DONTCARE ,-1 );if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for item conntrack" ); rte_errno =EINVAL ;
@@ -2287,7 +2292,8 @@ mlx5dr_definer_conv_item_meter_color(struct mlx5dr_definer_conv_data *cd,return 0 ; reg =flow_hw_get_reg_id_from_ctx (cd->ctx, -RTE_FLOW_ITEM_TYPE_METER_COLOR ,0 ); +RTE_FLOW_ITEM_TYPE_METER_COLOR , +MLX5DR_TABLE_TYPE_DONTCARE ,0 );MLX5_ASSERT (reg >0 ); fc =mlx5dr_definer_get_register_fc (cd, reg);
@@ -2882,6 +2888,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,const struct rte_flow_field_data *other_f, struct mlx5dr_definer_conv_data *cd, int item_idx, + enum mlx5dr_table_type table_domain_type, enum mlx5dr_definer_compare_dw_selectors dw_offset) { struct mlx5dr_definer_fc *fc = NULL;
@@ -2896,7 +2903,8 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,switch (f->field) {case RTE_FLOW_FIELD_META : reg =flow_hw_get_reg_id_from_ctx (cd->ctx, -RTE_FLOW_ITEM_TYPE_META ,-1 ); +RTE_FLOW_ITEM_TYPE_META , + table_domain_type,-1 );if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for compare metadata field" ); rte_errno =EINVAL ;
@@ -2915,6 +2923,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,case RTE_FLOW_FIELD_TAG : reg =flow_hw_get_reg_id_from_ctx (cd->ctx,RTE_FLOW_ITEM_TYPE_TAG , +MLX5DR_TABLE_TYPE_DONTCARE , f->tag_index);if (reg <=0 ) {DR_LOG (ERR ,"Invalid register for compare tag field" );
@@ -2970,6 +2979,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f,static int mlx5dr_definer_conv_item_compare (struct mlx5dr_definer_conv_data *cd, +enum mlx5dr_table_type table_domain_type,struct rte_flow_item *item,int item_idx) {
@@ -2986,11 +2996,13 @@ mlx5dr_definer_conv_item_compare(struct mlx5dr_definer_conv_data *cd, } ret =mlx5dr_definer_conv_item_compare_field (a, b, cd, item_idx, + table_domain_type,MLX5DR_DEFINER_COMPARE_ARGUMENT_0 );if (ret)return ret; ret =mlx5dr_definer_conv_item_compare_field (b,NULL , cd, item_idx, + table_domain_type,MLX5DR_DEFINER_COMPARE_BASE_0 );if (ret)return ret;
@@ -3086,7 +3098,7 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, item_flags |=MLX5_FLOW_ITEM_TAG ;break ;case RTE_FLOW_ITEM_TYPE_META : - ret =mlx5dr_definer_conv_item_metadata (&cd, items, i); + ret =mlx5dr_definer_conv_item_metadata (&cd, matcher->tbl->type, items, i); item_flags |=MLX5_FLOW_ITEM_METADATA ;break ;case RTE_FLOW_ITEM_TYPE_GRE :
@@ -3177,7 +3189,7 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx,DR_LOG (ERR ,"Compare matcher not supported for more than one item" ); goto not_supp; } - ret =mlx5dr_definer_conv_item_compare (&cd, items, i); + ret =mlx5dr_definer_conv_item_compare (&cd, matcher->tbl->type, items, i); item_flags |=MLX5_FLOW_ITEM_COMPARE ; matcher->flags |=MLX5DR_MATCHER_FLAGS_COMPARE ;break ;
drivers/net/mlx5/mlx5_flow.h +66 -56
142 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow_hw.c +1 -9
@@ -7273,15 +7273,7 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, " when egress attribute is set");break ;case RTE_FLOW_ITEM_TYPE_META : -if (!priv->sh->config.dv_esw_en || - priv->sh->config.dv_xmeta_en !=MLX5_XMETA_MODE_META32_HWS ) { -if (attr->ingress) -return rte_flow_error_set (error,EINVAL , -RTE_FLOW_ERROR_TYPE_ITEM ,NULL , -"META item is not supported" -" on current FW with ingress" -" attribute" ); - } +/* ingress + group 0 is not supported */ break ;case RTE_FLOW_ITEM_TYPE_METER_COLOR : {
Signature · 1 line
2.25.1
Quoted 11 lines
-----Original Message-----
From: Michael Baum <[email protected]>
Sent: Thursday, February 29, 2024 14:49
To: [email protected]
Cc: Matan Azrad <[email protected]>; Dariusz Sosnowski <[email protected]>; Raslan Darawsheh <[email protected]>; Slava Ovsiienko <[email protected]>; Ori Kam <[email protected]>; Suanming Mou <[email protected]>
Subject: [PATCH v2] net/mlx5: add HWS support for matching ingress metadata
Quoted 4 lines
Add support for matching metadata in HWS ingress rules.
It usingREG_Bmatching which is supported for each device supports HWS.Signed-off-by Michael Baum <[email protected]>
Best regards,
Dariusz Sosnowski
Hi,
Quoted 14 lines
-----Original Message-----
From: Michael Baum <[email protected]>
Sent: Thursday, February 29, 2024 3:49 PM
To: [email protected]
Cc: Matan Azrad <[email protected]>; Dariusz Sosnowski <[email protected]>; Raslan Darawsheh <[email protected]>; Slava Ovsiienko <[email protected]>; Ori Kam <[email protected]>; Suanming Mou <[email protected]>
Subject: [PATCH v2] net/mlx5: add HWS support for matching ingress metadataAdd support for matching metadata in HWS ingress rules.
It usingREG_Bmatching which is supported for each device supports HWS.
Quoted 7 lines
Signed-off-by Michael Baum <[email protected]>---
v2:
- Rebase.
- Fix compilation issue.
- Update documentation.
Patch applied to next-net-mlx,
Kindest regards
Raslan Darawsheh