net/mlx5: Refactor find_flow_rule
authorMark Bloch <markb@mellanox.com>
Fri, 16 Sep 2016 07:00:10 +0000 (07:00 +0000)
committerLeon Romanovsky <leon@kernel.org>
Sun, 30 Oct 2016 13:43:15 +0000 (15:43 +0200)
The way we compare between two dests will need to be used in other
places in the future, so we factor out the comparison logic
between two dests into a separate function.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

index e2bab9d09acb226a57ff5ea183e162596d9b6307..fca69379021e80742711289376eb4deeb95fb801 100644 (file)
@@ -153,6 +153,8 @@ static void del_rule(struct fs_node *node);
 static void del_flow_table(struct fs_node *node);
 static void del_flow_group(struct fs_node *node);
 static void del_fte(struct fs_node *node);
+static bool mlx5_flow_dests_cmp(struct mlx5_flow_destination *d1,
+                               struct mlx5_flow_destination *d2);
 
 static void tree_init_node(struct fs_node *node,
                           unsigned int refcount,
@@ -1064,21 +1066,30 @@ out:
        return fg;
 }
 
+static bool mlx5_flow_dests_cmp(struct mlx5_flow_destination *d1,
+                               struct mlx5_flow_destination *d2)
+{
+       if (d1->type == d2->type) {
+               if ((d1->type == MLX5_FLOW_DESTINATION_TYPE_VPORT &&
+                    d1->vport_num == d2->vport_num) ||
+                   (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))
+                       return true;
+       }
+
+       return false;
+}
+
 static struct mlx5_flow_rule *find_flow_rule(struct fs_fte *fte,
                                             struct mlx5_flow_destination *dest)
 {
        struct mlx5_flow_rule *rule;
 
        list_for_each_entry(rule, &fte->node.children, node.list) {
-               if (rule->dest_attr.type == dest->type) {
-                       if ((dest->type == MLX5_FLOW_DESTINATION_TYPE_VPORT &&
-                            dest->vport_num == rule->dest_attr.vport_num) ||
-                           (dest->type == MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE &&
-                            dest->ft == rule->dest_attr.ft) ||
-                           (dest->type == MLX5_FLOW_DESTINATION_TYPE_TIR &&
-                            dest->tir_num == rule->dest_attr.tir_num))
-                               return rule;
-               }
+               if (mlx5_flow_dests_cmp(&rule->dest_attr, dest))
+                       return rule;
        }
        return NULL;
 }