net/mlx5: make tunnel hub list thread safe
[dpdk.git] / drivers / net / mlx5 / mlx5_flow.h
index 9f61284..3105463 100644 (file)
@@ -485,22 +485,19 @@ struct mlx5_flow_dv_jump_tbl_resource {
 
 /* Port ID resource structure. */
 struct mlx5_flow_dv_port_id_action_resource {
-       ILIST_ENTRY(uint32_t)next;
-       /* Pointer to next element. */
-       uint32_t refcnt; /**< Reference counter. */
-       void *action;
-       /**< Action object. */
+       struct mlx5_cache_entry entry;
+       void *action; /**< Action object. */
        uint32_t port_id; /**< Port ID value. */
+       uint32_t idx; /**< Indexed pool memory index. */
 };
 
 /* Push VLAN action resource structure */
 struct mlx5_flow_dv_push_vlan_action_resource {
-       ILIST_ENTRY(uint32_t)next;
-       /* Pointer to next element. */
-       uint32_t refcnt; /**< Reference counter. */
+       struct mlx5_cache_entry entry; /* Cache entry. */
        void *action; /**< Action object. */
        uint8_t ft_type; /**< Flow table type, Rx, Tx or FDB. */
        rte_be32_t vlan_tag; /**< VLAN tag value. */
+       uint32_t idx; /**< Indexed pool memory index. */
 };
 
 /* Metadata register copy table entry. */
@@ -565,9 +562,12 @@ struct mlx5_flow_sub_actions_idx {
 
 /* Sample action resource structure. */
 struct mlx5_flow_dv_sample_resource {
-       ILIST_ENTRY(uint32_t)next; /**< Pointer to next element. */
-       uint32_t refcnt; /**< Reference counter. */
-       void *verbs_action; /**< Verbs sample action object. */
+       struct mlx5_cache_entry entry; /**< Cache entry. */
+       union {
+               void *verbs_action; /**< Verbs sample action object. */
+               void **sub_actions; /**< Sample sub-action array. */
+       };
+       uint32_t idx; /** Sample object index. */
        uint8_t ft_type; /** Flow Table Type */
        uint32_t ft_id; /** Flow Table Level */
        uint32_t ratio;   /** Sample Ratio */
@@ -584,8 +584,8 @@ struct mlx5_flow_dv_sample_resource {
 
 /* Destination array action resource structure. */
 struct mlx5_flow_dv_dest_array_resource {
-       ILIST_ENTRY(uint32_t)next; /**< Pointer to next element. */
-       uint32_t refcnt; /**< Reference counter. */
+       struct mlx5_cache_entry entry; /**< Cache entry. */
+       uint32_t idx; /** Destination array action object index. */
        uint8_t ft_type; /** Flow Table Type */
        uint8_t num_of_dest; /**< Number of destination actions. */
        void *action; /**< Pointer to the rdma core action. */
@@ -945,6 +945,7 @@ struct mlx5_flow_tunnel {
 /** PMD tunnel related context */
 struct mlx5_flow_tunnel_hub {
        LIST_HEAD(, mlx5_flow_tunnel) tunnels;
+       rte_spinlock_t sl;                      /* Tunnel list spinlock. */
        struct mlx5_hlist *groups;              /** non tunnel groups */
 };
 
@@ -1437,4 +1438,34 @@ struct mlx5_cache_entry *flow_dv_matcher_create_cb(struct mlx5_cache_list *list,
 void flow_dv_matcher_remove_cb(struct mlx5_cache_list *list,
                               struct mlx5_cache_entry *entry);
 
+int flow_dv_port_id_match_cb(struct mlx5_cache_list *list,
+                            struct mlx5_cache_entry *entry, void *cb_ctx);
+struct mlx5_cache_entry *flow_dv_port_id_create_cb(struct mlx5_cache_list *list,
+               struct mlx5_cache_entry *entry, void *cb_ctx);
+void flow_dv_port_id_remove_cb(struct mlx5_cache_list *list,
+                              struct mlx5_cache_entry *entry);
+
+int flow_dv_push_vlan_match_cb(struct mlx5_cache_list *list,
+                              struct mlx5_cache_entry *entry, void *cb_ctx);
+struct mlx5_cache_entry *flow_dv_push_vlan_create_cb
+                               (struct mlx5_cache_list *list,
+                                struct mlx5_cache_entry *entry, void *cb_ctx);
+void flow_dv_push_vlan_remove_cb(struct mlx5_cache_list *list,
+                                struct mlx5_cache_entry *entry);
+
+int flow_dv_sample_match_cb(struct mlx5_cache_list *list,
+                           struct mlx5_cache_entry *entry, void *cb_ctx);
+struct mlx5_cache_entry *flow_dv_sample_create_cb
+                               (struct mlx5_cache_list *list,
+                                struct mlx5_cache_entry *entry, void *cb_ctx);
+void flow_dv_sample_remove_cb(struct mlx5_cache_list *list,
+                             struct mlx5_cache_entry *entry);
+
+int flow_dv_dest_array_match_cb(struct mlx5_cache_list *list,
+                               struct mlx5_cache_entry *entry, void *cb_ctx);
+struct mlx5_cache_entry *flow_dv_dest_array_create_cb
+                               (struct mlx5_cache_list *list,
+                                struct mlx5_cache_entry *entry, void *cb_ctx);
+void flow_dv_dest_array_remove_cb(struct mlx5_cache_list *list,
+                                 struct mlx5_cache_entry *entry);
 #endif /* RTE_PMD_MLX5_FLOW_H_ */