OSDN Git Service

net/mlx5e: TC, Split pedit offloads verify from alloc_tc_pedit_action()
authorRoi Dayan <roid@nvidia.com>
Thu, 11 Nov 2021 07:09:23 +0000 (09:09 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 27 Jan 2022 20:37:32 +0000 (12:37 -0800)
Split pedit verify part into a new subfunction for better
maintainability.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index e4677f1..5eb5f6e 100644 (file)
@@ -2993,19 +2993,13 @@ static int offload_pedit_fields(struct mlx5e_priv *priv,
 
 static const struct pedit_headers zero_masks = {};
 
-static int alloc_tc_pedit_action(struct mlx5e_priv *priv, int namespace,
-                                struct mlx5e_tc_flow_parse_attr *parse_attr,
-                                u32 *action_flags,
-                                struct netlink_ext_ack *extack)
+static int verify_offload_pedit_fields(struct mlx5e_priv *priv,
+                                      struct mlx5e_tc_flow_parse_attr *parse_attr,
+                                      struct netlink_ext_ack *extack)
 {
        struct pedit_headers *cmd_masks;
-       int err;
        u8 cmd;
 
-       err = offload_pedit_fields(priv, namespace, parse_attr, action_flags, extack);
-       if (err < 0)
-               goto out_dealloc_parsed_actions;
-
        for (cmd = 0; cmd < __PEDIT_CMD_MAX; cmd++) {
                cmd_masks = &parse_attr->hdrs[cmd].masks;
                if (memcmp(cmd_masks, &zero_masks, sizeof(zero_masks))) {
@@ -3013,12 +3007,29 @@ static int alloc_tc_pedit_action(struct mlx5e_priv *priv, int namespace,
                        netdev_warn(priv->netdev, "attempt to offload an unsupported field (cmd %d)\n", cmd);
                        print_hex_dump(KERN_WARNING, "mask: ", DUMP_PREFIX_ADDRESS,
                                       16, 1, cmd_masks, sizeof(zero_masks), true);
-                       err = -EOPNOTSUPP;
-                       goto out_dealloc_parsed_actions;
+                       return -EOPNOTSUPP;
                }
        }
 
        return 0;
+}
+
+static int alloc_tc_pedit_action(struct mlx5e_priv *priv, int namespace,
+                                struct mlx5e_tc_flow_parse_attr *parse_attr,
+                                u32 *action_flags,
+                                struct netlink_ext_ack *extack)
+{
+       int err;
+
+       err = offload_pedit_fields(priv, namespace, parse_attr, action_flags, extack);
+       if (err)
+               goto out_dealloc_parsed_actions;
+
+       err = verify_offload_pedit_fields(priv, parse_attr, extack);
+       if (err)
+               goto out_dealloc_parsed_actions;
+
+       return 0;
 
 out_dealloc_parsed_actions:
        mlx5e_mod_hdr_dealloc(&parse_attr->mod_hdr_acts);