net/mlx5: reduce flex item flow handle size
authorGregory Etelson <getelson@nvidia.com>
Mon, 28 Feb 2022 10:01:24 +0000 (12:01 +0200)
committerRaslan Darawsheh <rasland@nvidia.com>
Wed, 2 Mar 2022 10:24:36 +0000 (11:24 +0100)
Reduce flex item flow handle size from 32 bits to 8 bits for each
flow.
The patch will save memory in setups with millions of flows.

Fixes: a23e9b6e3ee9 ("net/mlx5: handle flex item in flows")
Cc: stable@dpdk.org
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
drivers/net/mlx5/mlx5_flow.h
drivers/net/mlx5/mlx5_flow_dv.c

index e510921..484ce57 100644 (file)
@@ -700,7 +700,6 @@ struct mlx5_flow_handle {
        uint32_t split_flow_id:27; /**< Sub flow unique match flow id. */
        uint32_t is_meter_flow_id:1; /**< Indicate if flow_id is for meter. */
        uint32_t fate_action:3; /**< Fate action type. */
-       uint32_t flex_item; /**< referenced Flex Item bitmask. */
        union {
                uint32_t rix_hrxq; /**< Hash Rx queue object index. */
                uint32_t rix_jump; /**< Index to the jump action resource. */
@@ -716,6 +715,7 @@ struct mlx5_flow_handle {
 #if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H)
        struct mlx5_flow_handle_dv dvh;
 #endif
+       uint8_t flex_item; /**< referenced Flex Item bitmask. */
 } __rte_packed;
 
 /*
index 0b9df5f..c4a9b02 100644 (file)
@@ -10298,7 +10298,7 @@ flow_dv_translate_item_flex(struct rte_eth_dev *dev, void *matcher, void *key,
                /* Don't count both inner and outer flex items in one rule. */
                if (mlx5_flex_acquire_index(dev, spec->handle, true) != index)
                        MLX5_ASSERT(false);
-               dev_flow->handle->flex_item |= RTE_BIT32(index);
+               dev_flow->handle->flex_item |= (uint8_t)RTE_BIT32(index);
        }
        mlx5_flex_flow_translate_item(dev, matcher, key, item, is_inner);
 }
@@ -14649,7 +14649,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
                        int index = rte_bsf32(dev_handle->flex_item);
 
                        mlx5_flex_release_index(dev, index);
-                       dev_handle->flex_item &= ~RTE_BIT32(index);
+                       dev_handle->flex_item &= ~(uint8_t)RTE_BIT32(index);
                }
                if (dev_handle->dvh.matcher)
                        flow_dv_matcher_release(dev, dev_handle);