From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: Re: [PATCH] ixgbe: fix icc compile error Date: Wed, 23 Mar 2016 12:35:25 -0700 Message-ID: <20160323123525.09de2b2f@xeon-e3> References: <1458755158-16145-1-git-send-email-ferruh.yigit@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org To: Ferruh Yigit Return-path: Received: from mail-pa0-f47.google.com (mail-pa0-f47.google.com [209.85.220.47]) by dpdk.org (Postfix) with ESMTP id B479C2935 for ; Wed, 23 Mar 2016 20:35:10 +0100 (CET) Received: by mail-pa0-f47.google.com with SMTP id fe3so2894420pab.1 for ; Wed, 23 Mar 2016 12:35:10 -0700 (PDT) In-Reply-To: <1458755158-16145-1-git-send-email-ferruh.yigit@intel.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, 23 Mar 2016 17:45:58 +0000 Ferruh Yigit wrote: > Fixes: 06554d381d97 ("ixgbe: speed up non-vector Tx") > > icc (icc (ICC) 16.0.1 20151021) is generating following compile error: > " > CC ixgbe_rxtx.o > .../drivers/net/ixgbe/ixgbe_rxtx.c(153): error #3656: variable > "free" may be used before its value is set > (nb_free > 0 && m->pool != free[0]->pool)) { > ^ > " > > Indeed this is a false positive and code is correct. > "nb_free" check prevents the free[] access before its value set. > > But the patch is just for compiler to remove compiler error. > > Signed-off-by: Ferruh Yigit > --- > drivers/net/ixgbe/ixgbe_rxtx.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c > index ff6ddb8..ef1a26f 100644 > --- a/drivers/net/ixgbe/ixgbe_rxtx.c > +++ b/drivers/net/ixgbe/ixgbe_rxtx.c > @@ -128,7 +128,8 @@ ixgbe_tx_free_bufs(struct ixgbe_tx_queue *txq) > struct ixgbe_tx_entry *txep; > uint32_t status; > int i, nb_free = 0; > - struct rte_mbuf *m, *free[RTE_IXGBE_TX_MAX_FREE_BUF_SZ]; > + struct rte_mbuf *m; > + struct rte_mbuf *free[RTE_IXGBE_TX_MAX_FREE_BUF_SZ] = {0}; > > /* check DD bit on threshold descriptor */ > status = txq->tx_ring[txq->tx_next_dd].wb.status; Although this fixes a compiler bug, it also introduces a performance hit. The initialization will generate a string instruct (rep; stosz) and this stalls the multi-execution unit on many Intel CPU's. Better to add a override to the Makefile (for icc only and with big comment).