From 949a09c9ba237e3820eed2595738ef69a721075a Mon Sep 17 00:00:00 2001 From: Gregory Etelson Date: Mon, 28 Feb 2022 12:01:24 +0200 Subject: [PATCH] net/mlx5: reduce flex item flow handle size [ upstream commit cfe337e7157e7b8f9e3d136f5a1882d2af8a1dc0 ] 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") Signed-off-by: Gregory Etelson Acked-by: Viacheslav Ovsiienko --- drivers/net/mlx5/mlx5_flow.h | 2 +- drivers/net/mlx5/mlx5_flow_dv.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 7fec79afb3..f8bce92e9f 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -698,7 +698,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. */ @@ -714,6 +713,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; /* diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 7d22ac388e..ce0d5b1e37 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -10196,7 +10196,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); } @@ -14535,7 +14535,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);