[PATCH v10 06/21] hash/thash: remove use of VLAs for Windows built

Andre Muezerie andremue at linux.microsoft.com
Thu Nov 21 18:50:05 CET 2024


On Wed, Nov 20, 2024 at 10:40:07AM +0000, Medvedkin, Vladimir wrote:
> Hi Andre,
> 
> On 20/11/2024 03:13, Andre Muezerie wrote:
> >From: Konstantin Ananyev<konstantin.ananyev at huawei.com>
> >
> >1) ./lib/hash/rte_thash.c:774:9
> >     : warning: ISO C90 forbids variable length array ‘tmp_tuple’
> >
> > From my understanding, tuple size here should never exceed
> >sizeof(union rte_thash_tuple), so it should be safe to replace VLA with
> >fixed size array.
> 
> The tuple can exceed this size, for example if you use any tunneling
> header in RSS hash calculation.
> 
> HereIsuggestusingasa limitthe sizeof
> thelongestRSShashkeycurrentlysupported,whichis52bytes. Technically,
> the longest tuple with such a key should be (52 - sizeof(uint32_t)),
> so you can use this as a size of the tmp_tuple array
> 

Thanks, I'll update the code accordingly.

Andre

> >
> >Signed-off-by: Konstantin Ananyev<konstantin.ananyev at huawei.com>
> >---
> >  lib/hash/rte_thash.c | 2 +-
> >  lib/hash/rte_thash.h | 8 ++++++++
> >  2 files changed, 9 insertions(+), 1 deletion(-)
> >
> >diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
> >index 336c228e64..842e3ad85d 100644
> >--- a/lib/hash/rte_thash.c
> >+++ b/lib/hash/rte_thash.c
> >@@ -761,7 +761,7 @@ rte_thash_adjust_tuple(struct rte_thash_ctx *ctx,
> >  	uint32_t desired_value,	unsigned int attempts,
> >  	rte_thash_check_tuple_t fn, void *userdata)
> >  {
> >-	uint32_t tmp_tuple[tuple_len / sizeof(uint32_t)];
> >+	uint32_t tmp_tuple[RTE_THASH_MAX_L4_LEN];
> >  	unsigned int i, j, ret = 0;
> >  	uint32_t hash, adj_bits;
> >  	const uint8_t *hash_key;
> >diff --git a/lib/hash/rte_thash.h b/lib/hash/rte_thash.h
> >index c0af5968df..427246ad2e 100644
> >--- a/lib/hash/rte_thash.h
> >+++ b/lib/hash/rte_thash.h
> >@@ -121,6 +121,14 @@ __rte_internal
> >  uint32_t
> >  thash_get_rand_poly(uint32_t poly_degree);
> >+/**
> >+ * maximum length in dwords of input tuple to
> >+ * calculate hash of ipv(4|6) header +
> >+ * transport header
> >+ */
> >+#define RTE_THASH_MAX_L4_LEN	\
> >+	((sizeof(union rte_thash_tuple)) / sizeof(uint32_t))
> >+
> >  /**
> >   * Prepare special converted key to use with rte_softrss_be()
> >   * @param orig
> 
> -- 
> Regards,
> Vladimir


More information about the dev mailing list