net/mlx5: fix shared RSS action update
[dpdk.git] / drivers / net / mlx5 / mlx5_flow.h
index c33c0fe..a249c29 100644 (file)
@@ -80,6 +80,7 @@ enum mlx5_feature_name {
        MLX5_COPY_MARK,
        MLX5_MTR_COLOR,
        MLX5_MTR_SFX,
+       MLX5_ASO_FLOW_HIT,
 };
 
 /* Default queue number. */
@@ -345,8 +346,8 @@ enum mlx5_feature_name {
 #define MLX5_GENEVE_OPT_LEN_0 14
 #define MLX5_GENEVE_OPT_LEN_1 63
 
-#define MLX5_ENCAPSULATION_DECISION_SIZE (sizeof(struct rte_flow_item_eth) + \
-                                         sizeof(struct rte_flow_item_ipv4))
+#define MLX5_ENCAPSULATION_DECISION_SIZE (sizeof(struct rte_ether_hdr) + \
+                                         sizeof(struct rte_ipv4_hdr))
 
 /* IPv4 fragment_offset field contains relevant data in bits 2 to 15. */
 #define MLX5_IPV4_FRAG_OFFSET_MASK \
@@ -413,18 +414,6 @@ struct mlx5_flow_dv_matcher {
 
 #define MLX5_ENCAP_MAX_LEN 132
 
-/* Encap/decap resource key of the hash organization. */
-union mlx5_flow_encap_decap_key {
-       struct {
-               uint32_t ft_type:8;     /**< Flow table type, Rx or Tx. */
-               uint32_t refmt_type:8;  /**< Header reformat type. */
-               uint32_t buf_size:8;    /**< Encap buf size. */
-               uint32_t table_level:8; /**< Root table or not. */
-               uint32_t cksum;         /**< Encap buf check sum. */
-       };
-       uint64_t v64;                   /**< full 64bits value of key */
-};
-
 /* Encap/decap resource structure. */
 struct mlx5_flow_dv_encap_decap_resource {
        struct mlx5_hlist_entry entry;
@@ -575,6 +564,7 @@ struct mlx5_flow_dv_sample_resource {
                void *verbs_action; /**< Verbs sample action object. */
                void **sub_actions; /**< Sample sub-action array. */
        };
+       struct rte_eth_dev *dev; /**< Device registers the action. */
        uint32_t idx; /** Sample object index. */
        uint8_t ft_type; /** Flow Table Type */
        uint32_t ft_id; /** Flow Table Level */
@@ -596,6 +586,7 @@ struct mlx5_flow_dv_dest_array_resource {
        uint32_t idx; /** Destination array action object index. */
        uint8_t ft_type; /** Flow Table Type */
        uint8_t num_of_dest; /**< Number of destination actions. */
+       struct rte_eth_dev *dev; /**< Device registers the action. */
        void *action; /**< Pointer to the rdma core action. */
        struct mlx5_flow_sub_actions_idx sample_idx[MLX5_MAX_DEST_NUM];
        /**< Action index resources. */
@@ -950,8 +941,12 @@ struct mlx5_flow_tunnel {
 
 /** PMD tunnel related context */
 struct mlx5_flow_tunnel_hub {
+       /* Tunnels list
+        * Access to the list MUST be MT protected
+        */
        LIST_HEAD(, mlx5_flow_tunnel) tunnels;
-       rte_spinlock_t sl;                      /* Tunnel list spinlock. */
+        /* protect access to the tunnels list */
+       rte_spinlock_t sl;
        struct mlx5_hlist *groups;              /** non tunnel groups */
 };
 
@@ -1084,11 +1079,13 @@ struct mlx5_shared_action_rss {
        uint32_t refcnt; /**< Atomically accessed refcnt. */
        struct rte_flow_action_rss origin; /**< Original rte RSS action. */
        uint8_t key[MLX5_RSS_HASH_KEY_LEN]; /**< RSS hash key. */
-       uint16_t *queue; /**< Queue indices to use. */
+       struct mlx5_ind_table_obj *ind_tbl;
+       /**< Hash RX queues (hrxq, hrxq_tunnel fields) indirection table. */
        uint32_t hrxq[MLX5_RSS_HASH_FIELDS_LEN];
        /**< Hash RX queue indexes mapped to mlx5_rss_hash_fields */
        uint32_t hrxq_tunnel[MLX5_RSS_HASH_FIELDS_LEN];
        /**< Hash RX queue indexes for tunneled RSS */
+       rte_spinlock_t action_rss_sl; /**< Shared RSS action spinlock. */
 };
 
 struct rte_flow_shared_action {
@@ -1104,7 +1101,7 @@ struct mlx5_flow_workspace {
        struct mlx5_flow flows[MLX5_NUM_MAX_DEV_FLOWS];
        struct mlx5_flow_rss_desc rss_desc;
        uint32_t rssq_num; /* Allocated queue num in rss_desc. */
-       int flow_idx; /* Intermediate device flow index. */
+       uint32_t flow_idx; /* Intermediate device flow index. */
 };
 
 struct mlx5_flow_split_info {