[RFC,5/6] hash/thash: remove VLA warnings

Message ID 20240418103314.40705-6-konstantin.v.ananyev@yandex.ru (mailing list archive)
State New
Delegated to: Thomas Monjalon
Headers
Series core libs: remove VLA warnings |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Konstantin Ananyev April 18, 2024, 10:33 a.m. UTC
  From: Konstantin Ananyev <konstantin.ananyev@huawei.com>

1) ./lib/hash/rte_thash.c:774:9: warning: ISO C90 forbids variable length array ‘tmp_tuple’ [-Wvla]

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.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
---
 lib/hash/rte_thash.c | 2 +-
 lib/hash/rte_thash.h | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)
  

Comments

Morten Brørup April 19, 2024, 12:17 p.m. UTC | #1
> @@ -771,7 +771,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];

Keep the "/ sizeof(uint32_t)" here, rather than folding it into RTE_THASH_MAX_L4_LEN.

At your preference, keep RTE_THASH_MAX_L4_LEN (removing "in dwords" from it comment) or simply use:
uint32_t tmp_tuple[sizeof(union rte_thash_tuple) / sizeof(uint32_t)];

>  	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 30b657e67a..322fe3af66 100644
> --- a/lib/hash/rte_thash.h
> +++ b/lib/hash/rte_thash.h
> @@ -108,6 +108,14 @@ union rte_thash_tuple {
>  	struct rte_ipv6_tuple	v6;
>  };
> 
> +/**
> + * 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
> --
> 2.35.3

With sizeof(uint32_t) back in tmp_tuple...
Acked-by: Morten Brørup <mb@smartsharesystems.com>
  
Konstantin Ananyev April 19, 2024, 12:53 p.m. UTC | #2
> > @@ -771,7 +771,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];
> 
> Keep the "/ sizeof(uint32_t)" here, rather than folding it into RTE_THASH_MAX_L4_LEN.
> 
> At your preference, keep RTE_THASH_MAX_L4_LEN (removing "in dwords" from it comment) or simply use:
> uint32_t tmp_tuple[sizeof(union rte_thash_tuple) / sizeof(uint32_t)];

Not sure I got you here...
You are not happy with word "dwords" or ...?
Yes, it is size in 4B elems...
Same as   other RTE_THASH_*_LEN macros in the same .h 
 
> 
> >  	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 30b657e67a..322fe3af66 100644
> > --- a/lib/hash/rte_thash.h
> > +++ b/lib/hash/rte_thash.h
> > @@ -108,6 +108,14 @@ union rte_thash_tuple {
> >  	struct rte_ipv6_tuple	v6;
> >  };
> >
> > +/**
> > + * 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
> > --
> > 2.35.3
> 
> With sizeof(uint32_t) back in tmp_tuple...
> Acked-by: Morten Brørup <mb@smartsharesystems.com>
  
Morten Brørup April 19, 2024, 1:10 p.m. UTC | #3
> > > @@ -771,7 +771,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];
> >
> > Keep the "/ sizeof(uint32_t)" here, rather than folding it into
> RTE_THASH_MAX_L4_LEN.
> >
> > At your preference, keep RTE_THASH_MAX_L4_LEN (removing "in dwords" from it
> comment) or simply use:
> > uint32_t tmp_tuple[sizeof(union rte_thash_tuple) / sizeof(uint32_t)];
> 
> Not sure I got you here...
> You are not happy with word "dwords" or ...?
> Yes, it is size in 4B elems...
> Same as   other RTE_THASH_*_LEN macros in the same .h

Sorry, I missed those. I only looked at the .c file and the description of the tuple_len parameter in the .h file.

Then the RFC is Acked as is. :-)

> 
> >
> > >  	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 30b657e67a..322fe3af66 100644
> > > --- a/lib/hash/rte_thash.h
> > > +++ b/lib/hash/rte_thash.h
> > > @@ -108,6 +108,14 @@ union rte_thash_tuple {
> > >  	struct rte_ipv6_tuple	v6;
> > >  };
> > >
> > > +/**
> > > + * 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
> > > --
> > > 2.35.3
> >
> > With sizeof(uint32_t) back in tmp_tuple...
> > Acked-by: Morten Brørup <mb@smartsharesystems.com>
  

Patch

diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 68f653fa3d..e28d423172 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -771,7 +771,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 30b657e67a..322fe3af66 100644
--- a/lib/hash/rte_thash.h
+++ b/lib/hash/rte_thash.h
@@ -108,6 +108,14 @@  union rte_thash_tuple {
 	struct rte_ipv6_tuple	v6;
 };
 
+/**
+ * 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