From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: Re: [PATCH] eal: remove variable length array Date: Fri, 14 Dec 2018 10:36:03 -0800 Message-ID: <20181214103603.59336e0e@xeon-e3> References: <20181214163827.9403-1-jeffrey.b.shaw@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: dev@dpdk.org To: Jeff Shaw Return-path: Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by dpdk.org (Postfix) with ESMTP id 7F3641B90A for ; Fri, 14 Dec 2018 19:36:11 +0100 (CET) Received: by mail-pg1-f172.google.com with SMTP id z11so3082351pgu.0 for ; Fri, 14 Dec 2018 10:36:11 -0800 (PST) In-Reply-To: <20181214163827.9403-1-jeffrey.b.shaw@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Fri, 14 Dec 2018 08:38:27 -0800 Jeff Shaw wrote: > Compilers that do not support the C11 standard, or do not implement > gcc extensions, may not support variable length arrays. >=20 > The code prior to this commit produced the following warning when > compiled with "-Wvla -std=3Dc90". >=20 > warning: ISO C90 forbids variable length array =E2=80=98array=E2=80=99 = [-Wvla] >=20 > This commit removes the variable length array from the PMD debug > trace function by allocating memory dynamically on the stack using > alloca(). >=20 > Signed-off-by: Jeff Shaw > --- > lib/librte_eal/common/include/rte_dev.h | 19 +++++++++---------- > 1 file changed, 9 insertions(+), 10 deletions(-) >=20 > diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/com= mon/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; > =20 > va_start(ap, fmt); > + buf_len =3D vsnprintf(NULL, 0, fmt, ap) + 1; > + va_end(ap); > =20 > - { > - char buffer[vsnprintf(NULL, 0, fmt, ap) + 1]; > + buffer =3D (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.