DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] eal: remove variable length array
@ 2018-12-14 16:38 Jeff Shaw
  2018-12-14 18:36 ` Stephen Hemminger
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Jeff Shaw @ 2018-12-14 16:38 UTC (permalink / raw)
  To: dev; +Cc: jeffrey.b.shaw

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@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);
 
-		va_end(ap);
-
-		va_start(ap, fmt);
-		vsnprintf(buffer, sizeof(buffer), fmt, ap);
-		va_end(ap);
+	va_start(ap, fmt);
+	vsnprintf(buffer, buf_len, fmt, ap);
+	va_end(ap);
 
-		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
-			func_name, buffer);
-	}
+	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s", func_name, buffer);
 }
 
 /*
-- 
2.14.3

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 16:38 [dpdk-dev] [PATCH] eal: remove variable length array Jeff Shaw
@ 2018-12-14 18:36 ` Stephen Hemminger
  2018-12-14 18:59   ` Jeff Shaw
  2018-12-14 18:36 ` Mattias Rönnblom
  2018-12-14 20:40 ` [dpdk-dev] [PATCH v2] " Jeff Shaw
  2 siblings, 1 reply; 19+ messages in thread
From: Stephen Hemminger @ 2018-12-14 18:36 UTC (permalink / raw)
  To: Jeff Shaw; +Cc: dev

On Fri, 14 Dec 2018 08:38:27 -0800
Jeff Shaw <jeffrey.b.shaw@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@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.

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

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

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 16:38 [dpdk-dev] [PATCH] eal: remove variable length array Jeff Shaw
  2018-12-14 18:36 ` Stephen Hemminger
@ 2018-12-14 18:36 ` Mattias Rönnblom
  2018-12-14 19:07   ` Jeff Shaw
  2018-12-14 20:40 ` [dpdk-dev] [PATCH v2] " Jeff Shaw
  2 siblings, 1 reply; 19+ messages in thread
From: Mattias Rönnblom @ 2018-12-14 18:36 UTC (permalink / raw)
  To: Jeff Shaw, dev

On 2018-12-14 17:38, Jeff Shaw wrote:
> Compilers that do not support the C11 standard, or do not implement
> gcc extensions, may not support variable length arrays.
> 

VLAs are a C99 thing.

> 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().
> 

Is alloca() even included in *any* C standard? As far as I see, it just 
achieves the same thing in an uglier, less portable way than VLAs.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 18:36 ` Stephen Hemminger
@ 2018-12-14 18:59   ` Jeff Shaw
  2018-12-14 19:17     ` Jeff Shaw
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Shaw @ 2018-12-14 18:59 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Jeff Shaw, dev

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@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@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 :)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 18:36 ` Mattias Rönnblom
@ 2018-12-14 19:07   ` Jeff Shaw
  2018-12-14 20:28     ` Mattias Rönnblom
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Shaw @ 2018-12-14 19:07 UTC (permalink / raw)
  To: Mattias Rönnblom; +Cc: Jeff Shaw, dev

On Fri, Dec 14, 2018 at 07:36:38PM +0100, Mattias Rönnblom wrote:
> On 2018-12-14 17:38, Jeff Shaw wrote:
> > Compilers that do not support the C11 standard, or do not implement
> > gcc extensions, may not support variable length arrays.
> > 
> 
> VLAs are a C99 thing.

You're right, my mistake.

> 
> > 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().
> > 
> 
> Is alloca() even included in *any* C standard? As far as I see, it just
> achieves the same thing in an uglier, less portable way than VLAs.

I agree that it is much less elegant than a VLA. This is in preparation
for DPDK on Windows, which using the Microsoft Visual C++ (MSVC) compiler.
MSVC does not support variable length arrays. It does, however, support
alloca(), as does GCC/ICC.

For this particular instance, the point is moot, since the function is
not used anywhere and can just as easily be removed. Though it does not
address the issue for the ~100 other instances where VLAs are used. We
will be submitting patches for those as more common files are ported to
Windows.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 18:59   ` Jeff Shaw
@ 2018-12-14 19:17     ` Jeff Shaw
  0 siblings, 0 replies; 19+ messages in thread
From: Jeff Shaw @ 2018-12-14 19:17 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Jeff Shaw, dev, hofors

On Fri, Dec 14, 2018 at 10:59:28AM -0800, Jeff Shaw wrote:
> 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@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@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 :)

Actually, it cannot be removed. It is used by librte_eventdev. When
RTE_LIBRTE_EVENTDEV_DEBUG is defined, the RTE_PMD_DEBUG_TRACE macro
uses rte_pmd_debug_trace.

I will remove the cast and update the commit message to reference C99
instead of C11 as requested by Mattias R.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 19:07   ` Jeff Shaw
@ 2018-12-14 20:28     ` Mattias Rönnblom
  2018-12-14 20:50       ` [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE Stephen Hemminger
  2018-12-19 21:45       ` [dpdk-dev] [PATCH] eal: remove variable length array Thomas Monjalon
  0 siblings, 2 replies; 19+ messages in thread
From: Mattias Rönnblom @ 2018-12-14 20:28 UTC (permalink / raw)
  To: Jeff Shaw; +Cc: dev

On 2018-12-14 20:07, Jeff Shaw wrote:
>>> 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().
>>>
>>
>> Is alloca() even included in *any* C standard? As far as I see, it just
>> achieves the same thing in an uglier, less portable way than VLAs.
> 
> I agree that it is much less elegant than a VLA. This is in preparation
> for DPDK on Windows, which using the Microsoft Visual C++ (MSVC) compiler.
> MSVC does not support variable length arrays. It does, however, support
> alloca(), as does GCC/ICC.
> 
> For this particular instance, the point is moot, since the function is
> not used anywhere and can just as easily be removed. Though it does not
> address the issue for the ~100 other instances where VLAs are used. We
> will be submitting patches for those as more common files are ported to
> Windows.
> 

If Microsoft's C compiler doesn't support C99, some 20 years after its 
release, maybe it's time to find a new compiler, instead of messing up 
the DPDK code in a ~100 instances.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [dpdk-dev] [PATCH v2] eal: remove variable length array
  2018-12-14 16:38 [dpdk-dev] [PATCH] eal: remove variable length array Jeff Shaw
  2018-12-14 18:36 ` Stephen Hemminger
  2018-12-14 18:36 ` Mattias Rönnblom
@ 2018-12-14 20:40 ` Jeff Shaw
  2018-12-15 14:26   ` Wiles, Keith
  2 siblings, 1 reply; 19+ messages in thread
From: Jeff Shaw @ 2018-12-14 20:40 UTC (permalink / raw)
  To: dev; +Cc: mattias.ronnblom, stephen, jeffrey.b.shaw

Compilers that do not support the C99 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@intel.com>
---

V2:
 - Reference C99 in commit message instead of C11.
 - Remove unnecessary cast of alloca() returning void *.

---
 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..6d7a220b0 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 = alloca(buf_len);
 
-		va_end(ap);
-
-		va_start(ap, fmt);
-		vsnprintf(buffer, sizeof(buffer), fmt, ap);
-		va_end(ap);
+	va_start(ap, fmt);
+	vsnprintf(buffer, buf_len, fmt, ap);
+	va_end(ap);
 
-		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
-			func_name, buffer);
-	}
+	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s", func_name, buffer);
 }
 
 /*
-- 
2.14.3

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-14 20:28     ` Mattias Rönnblom
@ 2018-12-14 20:50       ` Stephen Hemminger
  2018-12-14 21:20         ` Jeff Shaw
  2018-12-21 18:11         ` [dpdk-dev] [PATCH v2] " Jeff Shaw
  2018-12-19 21:45       ` [dpdk-dev] [PATCH] eal: remove variable length array Thomas Monjalon
  1 sibling, 2 replies; 19+ messages in thread
From: Stephen Hemminger @ 2018-12-14 20:50 UTC (permalink / raw)
  To: Mattias Rönnblom; +Cc: Jeff Shaw, dev

Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
function. This removes variable length array which is problem on
Windows and other compilers not doing C99.

Also, drop unused RTE_PROC_PRIMARY macros.

Reported-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/librte_eal/common/include/rte_dev.h | 43 ++-----------------------
 1 file changed, 3 insertions(+), 40 deletions(-)

diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
index a9724dc9181c..e496da440028 100644
--- a/lib/librte_eal/common/include/rte_dev.h
+++ b/lib/librte_eal/common/include/rte_dev.h
@@ -43,54 +43,17 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
 					enum rte_dev_event_type event,
 					void *cb_arg);
 
-__attribute__((format(printf, 2, 0)))
-static inline void
-rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-
-	{
-		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
-
-		va_end(ap);
-
-		va_start(ap, fmt);
-		vsnprintf(buffer, sizeof(buffer), fmt, ap);
-		va_end(ap);
-
-		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
-			func_name, buffer);
-	}
-}
-
 /*
  * Enable RTE_PMD_DEBUG_TRACE() when at least one component relying on the
  * RTE_*_RET() macros defined below is compiled in debug mode.
  */
 #if defined(RTE_LIBRTE_EVENTDEV_DEBUG)
-#define RTE_PMD_DEBUG_TRACE(...) \
-	rte_pmd_debug_trace(__func__, __VA_ARGS__)
+#define RTE_PMD_DEBUG_TRACE(fmt, args...) \
+	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s():" fmt, __func__, ## args)
 #else
-#define RTE_PMD_DEBUG_TRACE(...) (void)0
+#define RTE_PMD_DEBUG_TRACE(...) do { } while(0)
 #endif
 
-/* Macros for checking for restricting functions to primary instance only */
-#define RTE_PROC_PRIMARY_OR_ERR_RET(retval) do { \
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) { \
-		RTE_PMD_DEBUG_TRACE("Cannot run in secondary processes\n"); \
-		return retval; \
-	} \
-} while (0)
-
-#define RTE_PROC_PRIMARY_OR_RET() do { \
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) { \
-		RTE_PMD_DEBUG_TRACE("Cannot run in secondary processes\n"); \
-		return; \
-	} \
-} while (0)
-
 /* Macros to check for invalid function pointers */
 #define RTE_FUNC_PTR_OR_ERR_RET(func, retval) do { \
 	if ((func) == NULL) { \
-- 
2.19.2

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-14 20:50       ` [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE Stephen Hemminger
@ 2018-12-14 21:20         ` Jeff Shaw
  2018-12-14 21:57           ` Stephen Hemminger
  2018-12-21 16:17           ` Ferruh Yigit
  2018-12-21 18:11         ` [dpdk-dev] [PATCH v2] " Jeff Shaw
  1 sibling, 2 replies; 19+ messages in thread
From: Jeff Shaw @ 2018-12-14 21:20 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Mattias Rönnblom, Jeff Shaw, dev

On Fri, Dec 14, 2018 at 12:50:55PM -0800, Stephen Hemminger wrote:
> Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
> function. This removes variable length array which is problem on
> Windows and other compilers not doing C99.
> 
> Also, drop unused RTE_PROC_PRIMARY macros.
> 
> Reported-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  lib/librte_eal/common/include/rte_dev.h | 43 ++-----------------------
>  1 file changed, 3 insertions(+), 40 deletions(-)
> 
> diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
> index a9724dc9181c..e496da440028 100644
> --- a/lib/librte_eal/common/include/rte_dev.h
> +++ b/lib/librte_eal/common/include/rte_dev.h
> @@ -43,54 +43,17 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
>  					enum rte_dev_event_type event,
>  					void *cb_arg);
>  
> -__attribute__((format(printf, 2, 0)))
> -static inline void
> -rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
> -{
> -	va_list ap;
> -
> -	va_start(ap, fmt);
> -
> -	{
> -		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
> -
> -		va_end(ap);
> -
> -		va_start(ap, fmt);
> -		vsnprintf(buffer, sizeof(buffer), fmt, ap);
> -		va_end(ap);
> -
> -		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
> -			func_name, buffer);
> -	}
> -}
> -

Will this break applications that try to use this function? Because it is not
a documented function, is there no guarantee it will be present?

>  /*
>   * Enable RTE_PMD_DEBUG_TRACE() when at least one component relying on the
>   * RTE_*_RET() macros defined below is compiled in debug mode.
>   */
>  #if defined(RTE_LIBRTE_EVENTDEV_DEBUG)
> -#define RTE_PMD_DEBUG_TRACE(...) \
> -	rte_pmd_debug_trace(__func__, __VA_ARGS__)
> +#define RTE_PMD_DEBUG_TRACE(fmt, args...) \
> +	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s():" fmt, __func__, ## args)

Actually, MSVC does not support named variable arguments either. I think this
will work instead:

  #define RTE_PMD_DEBUG_TRACE(fmt, ...) \
          rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s():" fmt, __func__, __VA_ARGS__)

The previous behavior was "%s: ..." not "%s():". I'm not sure if you meant to
change how the messages are displayed. I don't care either way, but maybe
users of the function would prefer the same format.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-14 21:20         ` Jeff Shaw
@ 2018-12-14 21:57           ` Stephen Hemminger
  2018-12-21 16:17           ` Ferruh Yigit
  1 sibling, 0 replies; 19+ messages in thread
From: Stephen Hemminger @ 2018-12-14 21:57 UTC (permalink / raw)
  To: Jeff Shaw; +Cc: Mattias Rönnblom, dev

On Fri, 14 Dec 2018 13:20:07 -0800
Jeff Shaw <jeffrey.b.shaw@intel.com> wrote:

> On Fri, Dec 14, 2018 at 12:50:55PM -0800, Stephen Hemminger wrote:
> > Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
> > function. This removes variable length array which is problem on
> > Windows and other compilers not doing C99.
> > 
> > Also, drop unused RTE_PROC_PRIMARY macros.
> > 
> > Reported-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
> > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> > ---
> >  lib/librte_eal/common/include/rte_dev.h | 43 ++-----------------------
> >  1 file changed, 3 insertions(+), 40 deletions(-)
> > 
> > diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
> > index a9724dc9181c..e496da440028 100644
> > --- a/lib/librte_eal/common/include/rte_dev.h
> > +++ b/lib/librte_eal/common/include/rte_dev.h
> > @@ -43,54 +43,17 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
> >  					enum rte_dev_event_type event,
> >  					void *cb_arg);
> >  
> > -__attribute__((format(printf, 2, 0)))
> > -static inline void
> > -rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
> > -{
> > -	va_list ap;
> > -
> > -	va_start(ap, fmt);
> > -
> > -	{
> > -		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
> > -
> > -		va_end(ap);
> > -
> > -		va_start(ap, fmt);
> > -		vsnprintf(buffer, sizeof(buffer), fmt, ap);
> > -		va_end(ap);
> > -
> > -		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
> > -			func_name, buffer);
> > -	}
> > -}
> > -  
> 
> Will this break applications that try to use this function? Because it is not
> a documented function, is there no guarantee it will be present?

It shouldn't be visible as part of EAL. Any code that was built that had
old MACRO would still run (ABI compatible) because it was inline.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH v2] eal: remove variable length array
  2018-12-14 20:40 ` [dpdk-dev] [PATCH v2] " Jeff Shaw
@ 2018-12-15 14:26   ` Wiles, Keith
  0 siblings, 0 replies; 19+ messages in thread
From: Wiles, Keith @ 2018-12-15 14:26 UTC (permalink / raw)
  To: Shaw, Jeffrey B; +Cc: dev, mattias.ronnblom, stephen



> On Dec 14, 2018, at 2:40 PM, Jeff Shaw <jeffrey.b.shaw@intel.com> wrote:
> 
> Compilers that do not support the C99 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@intel.com>
> ---
> 
> V2:
> - Reference C99 in commit message instead of C11.
> - Remove unnecessary cast of alloca() returning void *.
> 
> ---
> 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..6d7a220b0 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 = alloca(buf_len);

Looks like some formatting problems with tab and/or spaces. DPDK is tabs of size 8 and no spaces before tabs.

The code looks fine to me, except for the calling vsnprintf twice. Could we have used char buffer[SOME_NUMBER_THAT_IS_REASONABLE];

This would remove the two calls to vsnprintf() and alloca usage.

If everyone is OK with it then I am ok after the formatting problems get fixed.
> 
> -		va_end(ap);
> -
> -		va_start(ap, fmt);
> -		vsnprintf(buffer, sizeof(buffer), fmt, ap);
> -		va_end(ap);
> +	va_start(ap, fmt);
> +	vsnprintf(buffer, buf_len, fmt, ap);
> +	va_end(ap);
> 
> -		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
> -			func_name, buffer);
> -	}
> +	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s", func_name, buffer);
> }
> 
> /*
> -- 
> 2.14.3
> 

Regards,
Keith


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-14 20:28     ` Mattias Rönnblom
  2018-12-14 20:50       ` [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE Stephen Hemminger
@ 2018-12-19 21:45       ` Thomas Monjalon
  2018-12-20 10:53         ` Mattias Rönnblom
  1 sibling, 1 reply; 19+ messages in thread
From: Thomas Monjalon @ 2018-12-19 21:45 UTC (permalink / raw)
  To: Mattias Rönnblom, Jason Messer
  Cc: dev, Jeff Shaw, stephen, harini.ramakrishnan

14/12/2018 21:28, Mattias Rönnblom:
> On 2018-12-14 20:07, Jeff Shaw wrote:
> >>> 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().
> >>
> >> Is alloca() even included in *any* C standard? As far as I see, it just
> >> achieves the same thing in an uglier, less portable way than VLAs.
> > 
> > I agree that it is much less elegant than a VLA. This is in preparation
> > for DPDK on Windows, which using the Microsoft Visual C++ (MSVC) compiler.
> > MSVC does not support variable length arrays. It does, however, support
> > alloca(), as does GCC/ICC.
> > 
> > For this particular instance, the point is moot, since the function is
> > not used anywhere and can just as easily be removed. Though it does not
> > address the issue for the ~100 other instances where VLAs are used. We
> > will be submitting patches for those as more common files are ported to
> > Windows.
> 
> If Microsoft's C compiler doesn't support C99, some 20 years after its 
> release, maybe it's time to find a new compiler, instead of messing up 
> the DPDK code in a ~100 instances.

If think there is no reasonnable compiler for Windows.
Yes I know, it's crazy.

Microsoft, should we wait 10 more years to have C99 supported in MSVC?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-19 21:45       ` [dpdk-dev] [PATCH] eal: remove variable length array Thomas Monjalon
@ 2018-12-20 10:53         ` Mattias Rönnblom
  2018-12-20 11:03           ` Thomas Monjalon
  0 siblings, 1 reply; 19+ messages in thread
From: Mattias Rönnblom @ 2018-12-20 10:53 UTC (permalink / raw)
  To: Thomas Monjalon, Jason Messer
  Cc: dev, Jeff Shaw, stephen, harini.ramakrishnan

On 2018-12-19 22:45, Thomas Monjalon wrote:
> 14/12/2018 21:28, Mattias Rönnblom:
>> On 2018-12-14 20:07, Jeff Shaw wrote:
>>>>> 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().
>>>>
>>>> Is alloca() even included in *any* C standard? As far as I see, it just
>>>> achieves the same thing in an uglier, less portable way than VLAs.
>>>
>>> I agree that it is much less elegant than a VLA. This is in preparation
>>> for DPDK on Windows, which using the Microsoft Visual C++ (MSVC) compiler.
>>> MSVC does not support variable length arrays. It does, however, support
>>> alloca(), as does GCC/ICC.
>>>
>>> For this particular instance, the point is moot, since the function is
>>> not used anywhere and can just as easily be removed. Though it does not
>>> address the issue for the ~100 other instances where VLAs are used. We
>>> will be submitting patches for those as more common files are ported to
>>> Windows.
>>
>> If Microsoft's C compiler doesn't support C99, some 20 years after its
>> release, maybe it's time to find a new compiler, instead of messing up
>> the DPDK code in a ~100 instances.
> 
> If think there is no reasonnable compiler for Windows.
> Yes I know, it's crazy.
> 
With's wrong with the Windows version of Clang?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: remove variable length array
  2018-12-20 10:53         ` Mattias Rönnblom
@ 2018-12-20 11:03           ` Thomas Monjalon
  0 siblings, 0 replies; 19+ messages in thread
From: Thomas Monjalon @ 2018-12-20 11:03 UTC (permalink / raw)
  To: Mattias Rönnblom, Jason Messer, harini.ramakrishnan
  Cc: dev, Jeff Shaw, stephen

20/12/2018 11:53, Mattias Rönnblom:
> On 2018-12-19 22:45, Thomas Monjalon wrote:
> > 14/12/2018 21:28, Mattias Rönnblom:
> >> On 2018-12-14 20:07, Jeff Shaw wrote:
> >>>>> 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().
> >>>>
> >>>> Is alloca() even included in *any* C standard? As far as I see, it just
> >>>> achieves the same thing in an uglier, less portable way than VLAs.
> >>>
> >>> I agree that it is much less elegant than a VLA. This is in preparation
> >>> for DPDK on Windows, which using the Microsoft Visual C++ (MSVC) compiler.
> >>> MSVC does not support variable length arrays. It does, however, support
> >>> alloca(), as does GCC/ICC.
> >>>
> >>> For this particular instance, the point is moot, since the function is
> >>> not used anywhere and can just as easily be removed. Though it does not
> >>> address the issue for the ~100 other instances where VLAs are used. We
> >>> will be submitting patches for those as more common files are ported to
> >>> Windows.
> >>
> >> If Microsoft's C compiler doesn't support C99, some 20 years after its
> >> release, maybe it's time to find a new compiler, instead of messing up
> >> the DPDK code in a ~100 instances.
> > 
> > If think there is no reasonnable compiler for Windows.
> > Yes I know, it's crazy.
> > 
> With's wrong with the Windows version of Clang?

I agree it should be the preferred compiler for DPDK on Windows.

But Microsoft told there are some issues working with clang.
Jason, Harini, please, could you elaborate?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-14 21:20         ` Jeff Shaw
  2018-12-14 21:57           ` Stephen Hemminger
@ 2018-12-21 16:17           ` Ferruh Yigit
  1 sibling, 0 replies; 19+ messages in thread
From: Ferruh Yigit @ 2018-12-21 16:17 UTC (permalink / raw)
  To: Jeff Shaw, Stephen Hemminger; +Cc: Mattias Rönnblom, dev

On 12/14/2018 9:20 PM, Jeff Shaw wrote:
> On Fri, Dec 14, 2018 at 12:50:55PM -0800, Stephen Hemminger wrote:
>> Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
>> function. This removes variable length array which is problem on
>> Windows and other compilers not doing C99.
>>
>> Also, drop unused RTE_PROC_PRIMARY macros.
>>
>> Reported-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
>> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
>> ---
>>  lib/librte_eal/common/include/rte_dev.h | 43 ++-----------------------
>>  1 file changed, 3 insertions(+), 40 deletions(-)
>>
>> diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
>> index a9724dc9181c..e496da440028 100644
>> --- a/lib/librte_eal/common/include/rte_dev.h
>> +++ b/lib/librte_eal/common/include/rte_dev.h
>> @@ -43,54 +43,17 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
>>  					enum rte_dev_event_type event,
>>  					void *cb_arg);
>>  
>> -__attribute__((format(printf, 2, 0)))
>> -static inline void
>> -rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
>> -{
>> -	va_list ap;
>> -
>> -	va_start(ap, fmt);
>> -
>> -	{
>> -		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
>> -
>> -		va_end(ap);
>> -
>> -		va_start(ap, fmt);
>> -		vsnprintf(buffer, sizeof(buffer), fmt, ap);
>> -		va_end(ap);
>> -
>> -		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
>> -			func_name, buffer);
>> -	}
>> -}
>> -
> 
> Will this break applications that try to use this function? Because it is not
> a documented function, is there no guarantee it will be present?
> 
>>  /*
>>   * Enable RTE_PMD_DEBUG_TRACE() when at least one component relying on the
>>   * RTE_*_RET() macros defined below is compiled in debug mode.
>>   */
>>  #if defined(RTE_LIBRTE_EVENTDEV_DEBUG)
>> -#define RTE_PMD_DEBUG_TRACE(...) \
>> -	rte_pmd_debug_trace(__func__, __VA_ARGS__)
>> +#define RTE_PMD_DEBUG_TRACE(fmt, args...) \
>> +	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s():" fmt, __func__, ## args)
> 
> Actually, MSVC does not support named variable arguments either. I think this
> will work instead:
> 
>   #define RTE_PMD_DEBUG_TRACE(fmt, ...) \
>           rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s():" fmt, __func__, __VA_ARGS__)
> 
> The previous behavior was "%s: ..." not "%s():". I'm not sure if you meant to
> change how the messages are displayed. I don't care either way, but maybe
> users of the function would prefer the same format.
> 

+1 to remove "rte_pmd_debug_trace()" option, but I guess a new version is
required, to switch to '__VA_ARGS__' and perhaps to keep the format same, %s vs
%s().

Who can send a new version? Jeff?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [dpdk-dev] [PATCH v2] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-14 20:50       ` [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE Stephen Hemminger
  2018-12-14 21:20         ` Jeff Shaw
@ 2018-12-21 18:11         ` Jeff Shaw
  2018-12-21 18:18           ` [dpdk-dev] [PATCH v3] " Jeff Shaw
  1 sibling, 1 reply; 19+ messages in thread
From: Jeff Shaw @ 2018-12-21 18:11 UTC (permalink / raw)
  To: dev; +Cc: mattias.ronnblom, stephen, jeffrey.b.shaw, ferruh.yigit

From: Stephen Hemminger <stephen@networkplumber.org>

Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
function. This removes variable length array which is problem on
Windows and other compilers not doing C99.

Also, drop unused RTE_PROC_PRIMARY macros.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
---

V2:
  - Changed named variable "args..." to use "..." with ##__VA_LIST__.
    Pasting is necessary to support case where only the format string,
    with no arguments, is passed.

---
 lib/librte_eal/common/include/rte_dev.h | 44 +++------------------------------
 1 file changed, 4 insertions(+), 40 deletions(-)

diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
index a9724dc91..366beb7c0 100644
--- a/lib/librte_eal/common/include/rte_dev.h
+++ b/lib/librte_eal/common/include/rte_dev.h
@@ -43,54 +43,18 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
 					enum rte_dev_event_type event,
 					void *cb_arg);
 
-__attribute__((format(printf, 2, 0)))
-static inline void
-rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-
-	{
-		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
-
-		va_end(ap);
-
-		va_start(ap, fmt);
-		vsnprintf(buffer, sizeof(buffer), fmt, ap);
-		va_end(ap);
-
-		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
-			func_name, buffer);
-	}
-}
-
 /*
  * Enable RTE_PMD_DEBUG_TRACE() when at least one component relying on the
  * RTE_*_RET() macros defined below is compiled in debug mode.
  */
 #if defined(RTE_LIBRTE_EVENTDEV_DEBUG)
-#define RTE_PMD_DEBUG_TRACE(...) \
-	rte_pmd_debug_trace(__func__, __VA_ARGS__)
+#define RTE_PMD_DEBUG_TRACE(fmt, ...)					\
+	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: " fmt, __func__,	\
+		##__VA_ARGS__)
 #else
-#define RTE_PMD_DEBUG_TRACE(...) (void)0
+#define RTE_PMD_DEBUG_TRACE(...) do { } while(0)
 #endif
 
-/* Macros for checking for restricting functions to primary instance only */
-#define RTE_PROC_PRIMARY_OR_ERR_RET(retval) do { \
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) { \
-		RTE_PMD_DEBUG_TRACE("Cannot run in secondary processes\n"); \
-		return retval; \
-	} \
-} while (0)
-
-#define RTE_PROC_PRIMARY_OR_RET() do { \
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) { \
-		RTE_PMD_DEBUG_TRACE("Cannot run in secondary processes\n"); \
-		return; \
-	} \
-} while (0)
-
 /* Macros to check for invalid function pointers */
 #define RTE_FUNC_PTR_OR_ERR_RET(func, retval) do { \
 	if ((func) == NULL) { \
-- 
2.14.3

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [dpdk-dev] [PATCH v3] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-21 18:11         ` [dpdk-dev] [PATCH v2] " Jeff Shaw
@ 2018-12-21 18:18           ` Jeff Shaw
  2018-12-22  0:37             ` Ferruh Yigit
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Shaw @ 2018-12-21 18:18 UTC (permalink / raw)
  To: dev; +Cc: mattias.ronnblom, stephen, jeffrey.b.shaw, ferruh.yigit

From: Stephen Hemminger <stephen@networkplumber.org>

Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
function. This removes variable length array which is problem on
Windows and other compilers not doing C99.

Also, drop unused RTE_PROC_PRIMARY macros.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
---

V3:
  - Fix checkpatch error:
      ERROR:SPACING: space required before the open parenthesis '('

V2:
  - Changed named variable "args..." to use "..." with ##__VA_LIST__.
    Pasting is necessary to support case where only the format string,
    with no arguments, is passed.

---
 lib/librte_eal/common/include/rte_dev.h | 44 +++------------------------------
 1 file changed, 4 insertions(+), 40 deletions(-)

diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
index a9724dc91..d7b3c1576 100644
--- a/lib/librte_eal/common/include/rte_dev.h
+++ b/lib/librte_eal/common/include/rte_dev.h
@@ -43,54 +43,18 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
 					enum rte_dev_event_type event,
 					void *cb_arg);
 
-__attribute__((format(printf, 2, 0)))
-static inline void
-rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-
-	{
-		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
-
-		va_end(ap);
-
-		va_start(ap, fmt);
-		vsnprintf(buffer, sizeof(buffer), fmt, ap);
-		va_end(ap);
-
-		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
-			func_name, buffer);
-	}
-}
-
 /*
  * Enable RTE_PMD_DEBUG_TRACE() when at least one component relying on the
  * RTE_*_RET() macros defined below is compiled in debug mode.
  */
 #if defined(RTE_LIBRTE_EVENTDEV_DEBUG)
-#define RTE_PMD_DEBUG_TRACE(...) \
-	rte_pmd_debug_trace(__func__, __VA_ARGS__)
+#define RTE_PMD_DEBUG_TRACE(fmt, ...)					\
+	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: " fmt, __func__,	\
+		##__VA_ARGS__)
 #else
-#define RTE_PMD_DEBUG_TRACE(...) (void)0
+#define RTE_PMD_DEBUG_TRACE(...) do { } while (0)
 #endif
 
-/* Macros for checking for restricting functions to primary instance only */
-#define RTE_PROC_PRIMARY_OR_ERR_RET(retval) do { \
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) { \
-		RTE_PMD_DEBUG_TRACE("Cannot run in secondary processes\n"); \
-		return retval; \
-	} \
-} while (0)
-
-#define RTE_PROC_PRIMARY_OR_RET() do { \
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) { \
-		RTE_PMD_DEBUG_TRACE("Cannot run in secondary processes\n"); \
-		return; \
-	} \
-} while (0)
-
 /* Macros to check for invalid function pointers */
 #define RTE_FUNC_PTR_OR_ERR_RET(func, retval) do { \
 	if ((func) == NULL) { \
-- 
2.14.3

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [dpdk-dev] [PATCH v3] eal: simplify RTE_PMD_DEBUG_TRACE
  2018-12-21 18:18           ` [dpdk-dev] [PATCH v3] " Jeff Shaw
@ 2018-12-22  0:37             ` Ferruh Yigit
  0 siblings, 0 replies; 19+ messages in thread
From: Ferruh Yigit @ 2018-12-22  0:37 UTC (permalink / raw)
  To: Jeff Shaw, dev; +Cc: mattias.ronnblom, stephen

On 12/21/2018 6:18 PM, Jeff Shaw wrote:
> From: Stephen Hemminger <stephen@networkplumber.org>
> 
> Use rte_log directly, eliminating no longer used rte_pmd_dev_trace
> function. This removes variable length array which is problem on
> Windows and other compilers not doing C99.
> 
> Also, drop unused RTE_PROC_PRIMARY macros.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
> ---
> 
> V3:
>   - Fix checkpatch error:
>       ERROR:SPACING: space required before the open parenthesis '('
> 
> V2:
>   - Changed named variable "args..." to use "..." with ##__VA_LIST__.
>     Pasting is necessary to support case where only the format string,
>     with no arguments, is passed.
> 
> ---
>  lib/librte_eal/common/include/rte_dev.h | 44 +++------------------------------
>  1 file changed, 4 insertions(+), 40 deletions(-)
> 
> diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
> index a9724dc91..d7b3c1576 100644
> --- a/lib/librte_eal/common/include/rte_dev.h
> +++ b/lib/librte_eal/common/include/rte_dev.h
> @@ -43,54 +43,18 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,
>  					enum rte_dev_event_type event,
>  					void *cb_arg);
>  
> -__attribute__((format(printf, 2, 0)))
> -static inline void
> -rte_pmd_debug_trace(const char *func_name, const char *fmt, ...)
> -{
> -	va_list ap;
> -
> -	va_start(ap, fmt);
> -
> -	{
> -		char buffer[vsnprintf(NULL, 0, fmt, ap) + 1];
> -
> -		va_end(ap);
> -
> -		va_start(ap, fmt);
> -		vsnprintf(buffer, sizeof(buffer), fmt, ap);
> -		va_end(ap);
> -
> -		rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s",
> -			func_name, buffer);
> -	}
> -}
> -
>  /*
>   * Enable RTE_PMD_DEBUG_TRACE() when at least one component relying on the
>   * RTE_*_RET() macros defined below is compiled in debug mode.
>   */
>  #if defined(RTE_LIBRTE_EVENTDEV_DEBUG)
> -#define RTE_PMD_DEBUG_TRACE(...) \
> -	rte_pmd_debug_trace(__func__, __VA_ARGS__)
> +#define RTE_PMD_DEBUG_TRACE(fmt, ...)					\
> +	rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: " fmt, __func__,	\
> +		##__VA_ARGS__)

When RTE_PMD_DEBUG_TRACE enabled, mlx4/5 drivers are causing build error because
of '-pedantic' argument [1].
error is in 'RTE_FUNC_PTR_OR_ERR_RET' & 'RTE_FUNC_PTR_OR_RET', what do you think
removing 'RTE_PMD_DEBUG_TRACE' completely from these macros? Since
'RTE_PMD_DEBUG_TRACE' already enabled only with 'RTE_LIBRTE_EVENTDEV_DEBUG' it
is already disabled mostly.
Another option can be replacing 'RTE_PMD_DEBUG_TRACE' with 'rte_log', but with
DEBUG log type to not introduce new logs [2].

[1]
error: token pasting of ',' and __VA_ARGS__ is a GNU extension
[-Werror,-Wgnu-zero-variadic-macro-arguments]

[2]
  -   RTE_PMD_DEBUG_TRACE("Function not supported\n"); \
  +   rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: Function not supported\n",
__func__); \

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2018-12-22  0:37 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-14 16:38 [dpdk-dev] [PATCH] eal: remove variable length array Jeff Shaw
2018-12-14 18:36 ` Stephen Hemminger
2018-12-14 18:59   ` Jeff Shaw
2018-12-14 19:17     ` Jeff Shaw
2018-12-14 18:36 ` Mattias Rönnblom
2018-12-14 19:07   ` Jeff Shaw
2018-12-14 20:28     ` Mattias Rönnblom
2018-12-14 20:50       ` [dpdk-dev] [PATCH] eal: simplify RTE_PMD_DEBUG_TRACE Stephen Hemminger
2018-12-14 21:20         ` Jeff Shaw
2018-12-14 21:57           ` Stephen Hemminger
2018-12-21 16:17           ` Ferruh Yigit
2018-12-21 18:11         ` [dpdk-dev] [PATCH v2] " Jeff Shaw
2018-12-21 18:18           ` [dpdk-dev] [PATCH v3] " Jeff Shaw
2018-12-22  0:37             ` Ferruh Yigit
2018-12-19 21:45       ` [dpdk-dev] [PATCH] eal: remove variable length array Thomas Monjalon
2018-12-20 10:53         ` Mattias Rönnblom
2018-12-20 11:03           ` Thomas Monjalon
2018-12-14 20:40 ` [dpdk-dev] [PATCH v2] " Jeff Shaw
2018-12-15 14:26   ` Wiles, Keith

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).