[dpdk-dev] [PATCH] eal: remove variable length array

Jeff Shaw jeffrey.b.shaw at intel.com
Fri Dec 14 19:59:28 CET 2018


On Fri, Dec 14, 2018 at 10:36:03AM -0800, Stephen Hemminger wrote:
> On Fri, 14 Dec 2018 08:38:27 -0800
> Jeff Shaw <jeffrey.b.shaw at intel.com> wrote:
> 
> > Compilers that do not support the C11 standard, or do not implement
> > gcc extensions, may not support variable length arrays.
> > 
> > The code prior to this commit produced the following warning when
> > compiled with "-Wvla -std=c90".
> > 
> >   warning: ISO C90 forbids variable length array ‘array’ [-Wvla]
> > 
> > This commit removes the variable length array from the PMD debug
> > trace function by allocating memory dynamically on the stack using
> > alloca().
> > 
> > Signed-off-by: Jeff Shaw <jeffrey.b.shaw at intel.com>
> > ---
> >  lib/librte_eal/common/include/rte_dev.h | 19 +++++++++----------
> >  1 file changed, 9 insertions(+), 10 deletions(-)
> > 
> > diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
> > index a9724dc91..af772872b 100644
> > --- a/lib/librte_eal/common/include/rte_dev.h
> > +++ b/lib/librte_eal/common/include/rte_dev.h
> > @@ -47,22 +47,21 @@ __attribute__((format(printf, 2, 0)))
> >  static inline void
> >  rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
> >  {
> > +	char *buffer;
> > +	int buf_len;
> >  	va_list ap;
> >  
> >  	va_start(ap, fmt);
> > +	buf_len = vsnprintf(NULL, 0, fmt, ap) + 1;
> > +	va_end(ap);
> >  
> > -	{
> > -		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
> > +	buffer = (char *)alloca(buf_len);
> 
> alloca is void * so cast is not necessary.

I get a compiler warning on Windows, hence the cast. I suppose we could
disable the warning.

> 
> You might be able to skip the buffering step entirely by using rte_log
> a little more creatively, see how other logging works.

Probably right... this eventuall needs to be done in ~100 other places,
most of which aren't used with rte_log(), so it seemed fitting.

> 
> But to go further since rte_pmd_debug_trace is not used anywhere in
> current code base in DPDK, it should just be removed.

Much better solution :)


More information about the dev mailing list