On Mon, 2018-07-23 at 15:25 +0300, Leon Romanovsky wrote: > From: Yishai Hadas <yishaih@xxxxxxxxxxxx> > > Use the PRM size including the reserved when working with the FTE > match data. > > This comes to support forward compatibility for cases that current > reserved data will be exposed by the firmware by an application that > uses the DEVX API without changing the kernel. > > Also drop some driver checks around the match criteria leaving the > work > for firmware to enable forward compatibility for future bits there. > > Signed-off-by: Yishai Hadas <yishaih@xxxxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> Acked-by: Saeed Mahameed <saeedm@xxxxxxxxxxxx> > --- > drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 77 +---------- > ------------ > 1 file changed, 1 insertion(+), 76 deletions(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c > b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c > index 49a75d31185e..eba113cf1117 100644 > --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c > +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c > @@ -309,89 +309,17 @@ static struct fs_prio *find_prio(struct > mlx5_flow_namespace *ns, > return NULL; > } > > -static bool check_last_reserved(const u32 *match_criteria) > -{ > - char *match_criteria_reserved = > - MLX5_ADDR_OF(fte_match_param, match_criteria, > MLX5_FTE_MATCH_PARAM_RESERVED); > - > - return !match_criteria_reserved[0] && > - !memcmp(match_criteria_reserved, > match_criteria_reserved + 1, > - MLX5_FLD_SZ_BYTES(fte_match_param, > - MLX5_FTE_MATCH_PARAM_RESER > VED) - 1); > -} > - > -static bool check_valid_mask(u8 match_criteria_enable, const u32 > *match_criteria) > -{ > - if (match_criteria_enable & ~( > - (1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_OUTER_HEADERS) | > - (1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS) | > - (1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_INNER_HEADERS) | > - (1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS_2))) > - return false; > - > - if (!(match_criteria_enable & > - 1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_OUTER_HEADERS)) { > - char *fg_type_mask = MLX5_ADDR_OF(fte_match_param, > - match_criteria, > outer_headers); > - > - if (fg_type_mask[0] || > - memcmp(fg_type_mask, fg_type_mask + 1, > - MLX5_ST_SZ_BYTES(fte_match_set_lyr_2_4) - > 1)) > - return false; > - } > - > - if (!(match_criteria_enable & > - 1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS)) { > - char *fg_type_mask = MLX5_ADDR_OF(fte_match_param, > - match_criteria, > misc_parameters); > - > - if (fg_type_mask[0] || > - memcmp(fg_type_mask, fg_type_mask + 1, > - MLX5_ST_SZ_BYTES(fte_match_set_misc) - > 1)) > - return false; > - } > - > - if (!(match_criteria_enable & > - 1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_INNER_HEADERS)) { > - char *fg_type_mask = MLX5_ADDR_OF(fte_match_param, > - match_criteria, > inner_headers); > - > - if (fg_type_mask[0] || > - memcmp(fg_type_mask, fg_type_mask + 1, > - MLX5_ST_SZ_BYTES(fte_match_set_lyr_2_4) - > 1)) > - return false; > - } > - > - if (!(match_criteria_enable & > - 1 << > MLX5_CREATE_FLOW_GROUP_IN_MATCH_CRITERIA_ENABLE_MISC_PARAMETERS_2)) { > - char *fg_type_mask = MLX5_ADDR_OF(fte_match_param, > - match_criteria, > misc_parameters_2); > - > - if (fg_type_mask[0] || > - memcmp(fg_type_mask, fg_type_mask + 1, > - MLX5_ST_SZ_BYTES(fte_match_set_misc2) - > 1)) > - return false; > - } > - > - return check_last_reserved(match_criteria); > -} > - > static bool check_valid_spec(const struct mlx5_flow_spec *spec) > { > int i; > > - if (!check_valid_mask(spec->match_criteria_enable, spec- > >match_criteria)) { > - pr_warn("mlx5_core: Match criteria given mismatches > match_criteria_enable\n"); > - return false; > - } > - > for (i = 0; i < MLX5_ST_SZ_DW_MATCH_PARAM; i++) > if (spec->match_value[i] & ~spec->match_criteria[i]) > { > pr_warn("mlx5_core: match_value differs from > match_criteria\n"); > return false; > } > > - return check_last_reserved(spec->match_value); > + return true; > } > > static struct mlx5_flow_root_namespace *find_root(struct fs_node > *node) > @@ -1158,9 +1086,6 @@ struct mlx5_flow_group > *mlx5_create_flow_group(struct mlx5_flow_table *ft, > struct mlx5_flow_group *fg; > int err; > > - if (!check_valid_mask(match_criteria_enable, > match_criteria)) > - return ERR_PTR(-EINVAL); > - > if (ft->autogroup.active) > return ERR_PTR(-EPERM); > ��.n��������+%������w��{.n�����{���fk��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f