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

Medvedkin, Vladimir vladimir.medvedkin at intel.com
Wed Nov 20 11:40:07 CET 2024


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

>
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20241120/a7e0fed5/attachment-0001.htm>


More information about the dev mailing list