Merge branch 'linus/master' into rdma.git for-next
[linux-2.6-block.git] / drivers / net / ethernet / mellanox / mlx5 / core / fs_core.c
index 261cb6aacf124ed1bb4d516be7d266e9efd881c2..f418541af7cf13f96ea24613648150bb727397be 100644 (file)
@@ -310,89 +310,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_RESERVED) - 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)
@@ -1159,9 +1087,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);
 
@@ -1432,7 +1357,9 @@ static bool mlx5_flow_dests_cmp(struct mlx5_flow_destination *d1,
                    (d1->type == MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE &&
                     d1->ft == d2->ft) ||
                    (d1->type == MLX5_FLOW_DESTINATION_TYPE_TIR &&
-                    d1->tir_num == d2->tir_num))
+                    d1->tir_num == d2->tir_num) ||
+                   (d1->type == MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM &&
+                    d1->ft_num == d2->ft_num))
                        return true;
        }